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

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

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

> df
    x1
a   x
b   y
c   z

> df[1, ] # returns atomic vector
[1] x 

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

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

> df[1, ] # returns data frame
   X1 X2
a  x  u 

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

最佳答案
这是因为[是drop = TRUE的默认参数.

来自?“[”

drop
For matrices and arrays. If TRUE the result is coerced to the
lowest possible dimension (see the examples). This only works for
extracting elements, not for the replacement. See drop for further
details.

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

默认行为:

> 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

使用drop = FALSE:

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

> dat2[1, , drop=FALSE]
  x y
1 a A

转载注明原文:在R中,如果数据帧只有一列,为什么从数据帧中选择行会将数据作为向量返回? - 代码日志