有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 行,因为这些数据集中有相同的类别。但是,我需要将数据集中存在s但medagger数据集中不存在的类别放入单独的数据框中。在本例中,我需要显示数据框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但未出现的类别出现medagger在new数据框中?谢谢。
您需要anti_join从dplyr库中获得预期的结果。根据文档:
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)
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |