我有一个包含 6 列的 R 数据框,我想创建一个仅包含三列的新数据框。
假设我的数据框是 df
,我想提取列 A
、B
和 E
,这是我能弄清楚的唯一命令:
data.frame(df$A,df$B,df$E)
有没有更紧凑的方法来做到这一点?
最佳答案
您可以使用列名称向量进行子集化。我非常喜欢这种方法,而不是那些将列名称视为对象名称的方法(例如 subset()
),特别是在函数、包或应用程序中编程时。
# data for reproducible example
# (and to avoid confusion from trying to subset `stats::df`)
df <- setNames(data.frame(as.list(1:5)), LETTERS[1:5])
# subset
df[c("A","B","E")]
请注意,没有逗号(即不是 df[,c("A","B","C")]
)。那是因为df[,"A"]
返回一个向量,而不是数据框。但是df["A"]
将始终返回一个数据框。
str(df["A"])
## 'data.frame': 1 obs. of 1 variable:
## $ A: int 1
str(df[,"A"]) # vector
## int 1
<小时/>
感谢David Dorchies指出df[,"A"]
返回一个向量而不是 data.frame,并返回 Antoine Fabri为我的原始解决方案(下面)提出更好的替代方案(上面)。
# subset (original solution--not recommended)
df[,c("A","B","E")] # returns a data.frame
df[,"A"] # returns a vector
关于r - 从数据框中提取特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085806/