在R中,如果数据帧只有一列,为什么从数据帧中选择行会将数据作为向量返回?

mal*_*ana 5 r dataframe

假设我们想要逐行访问数据.示例是简化的,但是当按行名称排序数据框时,例如,(df[order(row.names(df)])我们使用相同的技术.

如果数据框有一列,我们得到一个原子向量:

> df
    x1
a   x
b   y
c   z

> df[1, ] # returns atomic vector
[1] x 
Run Code Online (Sandbox Code Playgroud)

如果数据框有两列,我们会返回包含行名的1行数据帧:

> df
    x1 x2
a   x  u
b   y  v
c   z  w 

> df[1, ] # returns data frame
   X1 X2
a  x  u 
Run Code Online (Sandbox Code Playgroud)

我不明白为什么数据帧上的相同操作会产生两种类型的结果,具体取决于帧的列数.

And*_*rie 11

这是因为默认参数[drop=TRUE.

?"["

drop
对于矩阵和数组.如果为TRUE,则将结果强制转换为可能的最低维度(请参阅示例).这仅适用于提取元素,而不适用于替换元素.有关详细信息,请参阅drop.

> dat1 <- data.frame(x=letters[1:3])
> dat2 <- data.frame(x=letters[1:3], y=LETTERS[1:3])
Run Code Online (Sandbox Code Playgroud)

默认行为:

> dat[1, ]
     row sessionId scenarionName stepName duration
[1,]   1      1001             A    start        0

> dat[2, ]
     row sessionId scenarionName stepName duration
[1,]   2      1001             A    step1      2.2
Run Code Online (Sandbox Code Playgroud)

使用drop=FALSE:

> dat1[1, , drop=FALSE]
  x
1 a

> dat2[1, , drop=FALSE]
  x y
1 a A
Run Code Online (Sandbox Code Playgroud)

  • 这是'The R Inferno'Circle 8.1.45 http://www.burns-stat.com/pages/Tutor/R_inferno.pdf (10认同)