R 使用逻辑索引从数据帧中选择行: accessing columns by `$` vs `[]`

标签 r dataframe

我有一个简单的 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$coldf[, 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/

相关文章:

python - 将长数据帧转换为宽数据帧

python - 在不迭代的情况下向量化 Pandas DataFrame 上的乘法和字典映射?

python - 如何分组并根据总和过滤数据框?

java - 如何在 Java 中向 Row[] 添加手动值

r - 如何让 switch() 处理 NA?

r - 是否可以在砖石网格中排列 Shiny 的应用程序卡?

r - 如何将符号放入参数列表

r - 将长数据除以R中另一个数据集中的值

r - 如何将列表中的每个元素与其他元素进行比较,并将结果作为 R 中的成对比较矩阵输出?

python - 如果API没有返回数据,如何跳到Python中的另一个循环?