我是R的新手,所以我为我的新手问题道歉。
我有一个包含两个变量的数据框,我已将其排序,以便在短名单中为我提供所有最佳表现。我现在想要获取更大的4个变量数据帧,并删除较小列表中没有执行者字符串的所有行。
我尝试了以下内容:
clean_df <- df[match(best$retailer, all$retailer), ]
但这只给我一个df,其中包含我的所有列名和仅限NA。
我还尝试了一些基于字符串值的逻辑比较,但到目前为止还没有任何工作。非常感谢任何帮助。
答案 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