R - 将矢量/数据帧中的所有值与另一个数据帧中的值进行比较以进行过滤

时间:2015-08-14 00:56:24

标签: r dataframe comparison

我是R的新手,所以我为我的新手问题道歉。

我有一个包含两个变量的数据框,我已将其排序,以便在短名单中为我提供所有最佳表现。我现在想要获取更大的4个变量数据帧,并删除较小列表中没有执行者字符串的所有行。

我尝试了以下内容:

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

但这只给我一个df,其中包含我的所有列名和仅限NA。

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

2 个答案:

答案 0 :(得分:1)

假设我们有两个数据帧('all','best')并且希望将'all'中的行保持在与'零售商'列相比不是'最佳'的行中,我们可以使用{{1 }}。从输出中,我们可以检查'df'数据集(虽然不清楚)。

anti_join

或者我们可能会使用library(dplyr) anti_join(all, best, by='retailer') 来查找'all'中对'零售商'列也“最佳”的元素,以获取逻辑索引并%in%'df'

subset

或者使用df[all$retailer %in% best$retailer,] ,我们可以设置match,以便我们之前获得的nomatch=0值将转换为“0”。由于R中的索引从1开始,因此0值对过滤没有影响。

NA

答案 1 :(得分:1)

您只需将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