rs0*_*028 37 r subset dataframe
说我有一个data.frame:
df <- data.frame(A=c(10,20,30),B=c(11,22,33), C=c(111,222,333))
A B C
1 10 11 111
2 20 22 222
3 30 33 333
Run Code Online (Sandbox Code Playgroud)
如果我选择两个(或更多)列,我会得到一个data.frame:
x <- df[,1:2]
A B
1 10 11
2 20 22
3 30 33
Run Code Online (Sandbox Code Playgroud)
这就是我要的.但是,如果我只选择一列,我会得到一个数字向量:
x <- df[,1]
[1] 1 2 3
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用as.data.frame(),它不会更改两列或更多列的结果.它确实在一列的情况下返回data.frame,但不保留列名:
x <- as.data.frame(df[,1])
df[, 1]
1 1
2 2
3 3
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它会像这样.在我看来,如果我提取一个或两个或十个列,它应该没有区别.IT应始终返回向量(或矩阵)或始终返回data.frame(具有正确的名称).我错过了什么?谢谢!
注意:这不是关于矩阵的问题的重复,因为矩阵和data.frame在R中是根本不同的数据类型,并且可以与dplyr不同地工作.有几个答案适用于data.frame但不适用于矩阵.
Jil*_*ina 74
使用 drop=FALSE
> x <- df[,1, drop=FALSE]
> x
A
1 10
2 20
3 30
Run Code Online (Sandbox Code Playgroud)
从文档(请参阅参考资料?"[")中,您可以找到:
如果drop = TRUE,则结果被强制转换为可能的最低维度.
Sve*_*ein 22
省略,:
x <- df[1]
A
1 10
2 20
3 30
Run Code Online (Sandbox Code Playgroud)
从帮助页面?"[":
索引[类似于原子向量并选择指定元素的列表.
数据框是一个列表.列是它的元素.