假设我们想要逐行访问数据.示例是简化的,但是当按行名称排序数据框时,例如,(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)