我有一个简单的 R data.frame
对象 df
。我试图根据 df
中的 col
列的逻辑索引从此数据框中选择行。
我来自Python世界,在类似的操作中,我可以选择使用df[df[col] == 1]
或df[df.col == 1进行选择]
具有相同的最终结果。
但是,在 R 数据帧中,df[df$col == 1]
与 df[df[,col] == 1]
相比给出了错误的结果(由 summary
命令确认)。我无法从 http://adv-r.had.co.nz/Subsetting.html 等链接理解这种差异。看来无论哪种方式都可以。此外,df$col
和 df[, col]
上的 str
命令显示相同的输出。
是否有关于何时使用 $
与 []
运算符的指南?
编辑: 深入挖掘并使用这个 question作为引用,下面的代码似乎可以正常工作
df[which(df$col == 1),]
但是,不清楚如何防范 NA
以及何时使用 which
最佳答案
你混淆了很多事情。
在
df[,col]
col 应该是列号。例如,
col = 2
x = df[,col]
将选择第二列并将其存储到 x。
在
df$col
col 应该是列名。例如,
df=data.frame(aa=1:5,bb=10:14)
x = df$bb
将选择第二列并将其存储到x。但你不能写 df$2
.
最后,
df[[col]]
与 df[,col]
相同如果 col 是一个数字。如果 col 是一个字符(R 中的“字符”与其他语言中的字符串含义相同),则它选择具有该名称的列。示例:
df=data.frame(aa=1:5,bb=10:14)
foo = "bb"
x = df[[foo]]
y = df[[2]]
z = df[["bb"]]
现在 x、y 和 z 都包含 df 第二列的副本。
符号foo[[bar]]
来自列表。符号foo[,bar]
来自矩阵。由于dataframe同时具有矩阵和列表的特性,因此可以同时使用两者。
关于R 使用逻辑索引从数据帧中选择行: accessing columns by `$` vs `[]` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44765297/