如何在R中选择一个数据集中但不在另一个数据集中的类别

psy*_*sky 0 r dplyr

有2个数据集

s=structure(list(var1 = c("a", "f", "k", "tt", "ee"), var2 = c("b", 
"g", "l", "qq", "rr"), var3 = c("c", "h", "m", "ff", "cc"), var4 = c("d", 
"i", "n", "gg", "vv"), var5 = c("e", "j", "o", "aa", "xx"), metric_var = c(100L, 
200L, 300L, 567L, 789L)), class = "data.frame", row.names = c(NA, 
-5L))
Run Code Online (Sandbox Code Playgroud)

medagger=structure(list(var1 = c("a", "z", "w", "f", "k"), var2 = c("b", 
"u", "e", "g", "l"), var3 = c("c", "p", "r", "h", "m"), var4 = c("d", 
"q", "q", "i", "n"), var5 = c("e", "n", "w", "j", "o"), metric_var = c(100L, 
200L, 400L, 500L, 700L)), class = "data.frame", row.names = c(NA, 
-5L))
Run Code Online (Sandbox Code Playgroud)

var1-var5 是分类变量,它们的值是类别。如果我们进行内连接s和 amedagger我们会得到这个结果

merge(s,medagger,by=c("var1","var2","var3","var4","var5"))
  var1 var2 var3 var4 var5 metric_var.x metric_var.y
1    a    b    c    d    e          100          100
2    f    g    h    i    j          200          500
3    k    l    m    n    o          300          700
Run Code Online (Sandbox Code Playgroud)

仅返回 3 行,因为这些数据集中有相同的类别。但是,我需要将数据集中存在smedagger数据集中不存在的类别放入单独的数据框中。在本例中,我需要显示数据框new,其中仅包含s.

var1    var2    var3    var4    var5    metric_var
tt  qq  ff  gg  aa  567
ee  rr  cc  vv  xx  789
Run Code Online (Sandbox Code Playgroud)

如何使数据框中出现s但未出现的类别出现medaggernew数据框中?谢谢。

Vis*_* A. 6

您需要anti_joindplyr库中获得预期的结果。根据文档:

anti_join() 返回 x 中与 y 不匹配的所有行。

文档

library(dplyr)

df <- s %>%
  anti_join(medagger, by = c("var1","var2","var3","var4","var5"))
Run Code Online (Sandbox Code Playgroud)

输出将是这样的:

  var1 var2 var3 var4 var5 metric_var
1   tt   qq   ff   gg   aa        567
2   ee   rr   cc   vv   xx        789
Run Code Online (Sandbox Code Playgroud)