R-将向量/数据帧中的所有值与另一个数据帧中的值进行比较以进行筛选

R-将向量/数据帧中的所有值与另一个数据帧中的值进行比较以进行筛选,r,dataframe,comparison,R,Dataframe,Comparison,我是新手,所以我为我的新手问题道歉 我有一个由两个变量组成的数据框架,我已经对其进行了排序,以在短列表中列出我的所有最佳执行者。现在,我想获取一个由4个变量组成的更大的数据帧,并删除较小列表中没有performer字符串的所有行 我尝试了以下方法: clean_df <- df[match(best$retailer, all$retailer), ] 但这给了我一个只包含我所有列名和NAs的df 我还尝试了一些基于字符串值的逻辑比较,但到目前为止没有任何效果。非常感谢您的帮助。假设我们

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

我有一个由两个变量组成的数据框架,我已经对其进行了排序,以在短列表中列出我的所有最佳执行者。现在,我想获取一个由4个变量组成的更大的数据帧,并删除较小列表中没有performer字符串的所有行

我尝试了以下方法:

clean_df <- df[match(best$retailer, all$retailer), ]
但这给了我一个只包含我所有列名和NAs的df


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

假设我们有两个数据帧“all”、“best”,并且希望保留“all”中与“retailer”列不在“best”中的行,我们可以使用anti_join。从输出中,我们可以使用“df”数据集进行检查,但不清楚

library(dplyr)
anti_join(all, best, by='retailer')
或者,我们可以使用%in%来查找“所有”中也在“零售商”列的“最佳”中的元素,以获取逻辑索引和“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

你能举个例子吗?也许'df[!所有$DELETARY%在%best$DELETARY中,]非常感谢!第一个建议对我不起作用,因为我收到一条错误消息,说dplyr与我的R版本不兼容。它说它适用于3.1.1版本,我刚刚下载了最新的一个。然而,第二个解决方案与删除的工作!并与预期结果相匹配。我还没有尝试第二种解决方案,但我也会尽快尝试。@adlopez15感谢您的反馈。您可能需要一个新版本或R才能使第一个选项正常工作。但是,从您的评论来看,似乎您需要内部加入而不是反加入。谢谢。这也起了作用。我也必须把指数改为best$retailer,然后我得到了我想要的结果。再次感谢!