R - 将 vector/dataframe 中的所有值与另一个数据框中的值进行比较以进行过滤

R - Compare all values in a vector/dataframe against values in another dataframe for filtering

我是 R 的新手,所以对于我的新手问题深表歉意。

我有一个包含两个变量的数据框,我已经对它们进行了排序,以便在一个简短的列表中给出我所有表现最好的人。我现在想采用一个更大的 4 个变量数据框,并删除较小列表中没有执行者字符串的所有行。

我试过以下方法:

clean_df <- df[match(best$retailer, all$retailer), ]

但是这给了我一个只有我所有列名和 NA 的 df。

我也尝试了一些基于字符串值的逻辑比较,但到目前为止没有任何效果。非常感谢任何帮助。

假设我们有两个数据帧('all'、'best')并且想要保留 'all' 中不在 'best' 中的行 'retailer'列,我们可以使用anti_join。从输出中,我们可以检查 'df' 数据集(虽然不清楚)。

library(dplyr)
anti_join(all, best, by='retailer')

或者我们可以使用 %in% 来查找 'all' 中的元素,这些元素也在 'best' 中的 'retailer' 列中,以获得逻辑索引和 subset 'df'.

df[all$retailer %in% best$retailer,]

或者使用match,我们可以设置nomatch=0,这样我们之前得到的NA值将被转换为'0'。由于 R 中的索引从 1 开始,因此 0 值对过滤没有影响。

df[match(best$retailer, all$retailer, nomatch=0),]

你只需要将match的默认设置为FALSE或0,还要检查匹配的索引是否大于0,这样你就可以得到正确索引的逻辑向量。

set.seed(0)
best <- letters[1:4]
all <- data.frame(retailer=sample(letters, 30, rep=T), x=runif(30))

all[match(all$retailer, best, 0L)>0L, ]
#    retailer         x
# 11        b 0.4112744
# 25        d 0.2447973
# 28        a 0.3162717