r - 根据列表值过滤数据框列

标签 r list dataframe filter

我有一个这样的数据框:

df <- data.frame(var1 = c(1,1,3,4,5,6,7,8,9),
       var2 = c(11,11,33,44,55,66,77,88,99),
       var3 = c(111,111,333,444,555,666,777,888,999),
       var4 = c(1111,1111,3333,4444,5555,6666,7777,8888,9999))
> df
  var1 var2 var3 var4
1    1   11  111 1111
2    1   11  111 1111
3    3   33  333 3333
4    4   44  444 4444
5    5   55  555 5555
6    6   66  666 6666
7    7   77  777 7777
8    8   88  888 8888
9    9   99  999 9999

我想根据存储在列表中的多个列值过滤特定行。

例如:
my_list <- list(var1 = 1,
     var2 = 11,
     var3 = 111)
filtered_df <- df %>% filter(var1 == my_list$var1[[1]],
              var2 == my_list$var2[[1]],
              var3 == my_list$var3[[1]])
> filtered_df
  var1 var2 var3 var4
1    1   11  111 1111
2    1   11  111 1111

而不是包含 filter 中的每个变量,我可以选择列表中的元素并使用列表名称过滤数据框吗?

最佳答案

你的建议与data.table中的自然规律非常相似。 :

library(data.table)
setDT(df)
df[my_list, on = .(var1, var2, var3)]

   var1 var2 var3 var4
1:    1   11  111 1111
2:    1   11  111 1111

如果您先指定您的键,则过滤会更简洁:
setkey(df, var1, var2, var3)
df[my_list]

一个基本的 R 替代方案:
df[rowSums(df[1:3] == my_list) == 3L, ]

关于r - 根据列表值过滤数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60772400/

相关文章:

r - 使用 R 将字符值更改为负数

r - 从公式中提取所有唯一变量

HTML/CSS : white spaces/collapsed container in horizontal list

javascript - 使 onclick 对所有列表元素起作用

python - 使用 axis=1 调用 apply 并将不同长度的列表设置为单元格值时出现 Pandas ValueError

python - Pandas:如何交换行的单元格值,以便它们按字母顺序排列

r - 有没有办法在 R 中为 Word 制作漂亮的表格?

从 data.table groupby 模型中恢复 lm() 结果

r - 从命名列表或矢量创建调色板功能?

list - Prolog:按替代索引对列表进行排序