我在同一数据框中的R中有两个变量因子列表,每个变量都有一些重复:
v1 <- c("a1","a1","b2","b2","d4","c3","d4")
v2 <- c("a1","c3","d4","d4","e5","f6","g7")
A = data.frame(v1, v2)
目标是返回v1中v2中不存在的每个值,但每个唯一值只返回一次。基于this thread,我尝试了下面的代码,返回&#34; b2 b2&#34;:
A$v1[!A$v1 %in% A$v2]
我希望使用的实际数据超过50,000个案例,v1中的每个值最多出现100次。返回100个结果后,使用与上述%相同的函数截断,但由于v1中的重复,所有值都相同。
总而言之,我如何查询上面的数据框并仅返回值&#34; b2&#34;一次?
答案 0 :(得分:3)
您可以尝试setdiff()
with(A, setdiff(v1, v2))
# [1] "b2"
答案 1 :(得分:2)
你快到了。只需将其包装在unique()
:
unique(A$v1[!A$v1 %in% A$v2])
或不在数据框中组合向量:
unique(v1[!v1 %in% v2])
如果要将结果保存在新变量中:
uni <- unique(A$v1[!A$v1 %in% A$v2])
如果你想降低等级:
uni <- droplevels(unique(A$v1[!A$v1 %in% A$v2]))