假设我们想要逐行访问数据。这些示例已经过简化,但是当按行名称排序数据框时,例如(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
我不明白为什么数据帧上的相同操作会产生两种类型的结果,具体取决于帧的列数。
答案 0 :(得分:11)
这是因为[
的默认参数是drop=TRUE
。
来自?"["
降
对于矩阵和数组。如果为TRUE,则结果强制转换为 可能的最小尺寸(参见示例)。这只适用于 提取元素,而不是替换。请进一步了解 的信息。
> 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