📅  最后修改于: 2023-12-03 15:23:17.181000             🧑  作者: Mango
在 R 中,有时候需要比较两个数据框,找出一个数据框中而另一个数据框中不存在的行。本文将介绍如何在 R 中进行该操作。
我们将使用以下两个数据框作为示例:
df1 <- data.frame(id = c(1, 2, 3, 4, 5),
name = c("A", "B", "C", "D", "E"),
age = c(20, 30, 25, 40, 35))
df2 <- data.frame(id = c(1, 2, 3),
name = c("A", "B", "C"),
age = c(20, 30, 25))
在上面的示例中,df1 是所有人员的数据框,而 df2 是某些人员的数据框。
首先,我们可以使用 merge()
函数合并两个数据框,然后使用 anti_join()
函数找出不在 df2 中的数据:
library(dplyr)
df <- merge(df1, df2, all.x = TRUE)
df %>% anti_join(df2, by = c("id", "name", "age"))
# id name age
# 4 4 D 40
# 5 5 E 35
我们先将 df1 和 df2 合并,然后使用 anti_join()
函数找出不在 df2 中的数据。在 anti_join()
函数中,通过 by
参数指定连接键。
此时,输出结果为在 df1 中但不在 df2 中的人员数据。
另外,我们还可以使用 setdiff()
函数获取不在 df2 中的数据:
df1[setdiff(1:nrow(df1), match(paste(df2$id, df2$name, df2$age), paste(df1$id, df1$name, df1$age))), ]
# id name age
# 4 4 D 40
# 5 5 E 35
在上面的示例中,我们通过 setdiff()
函数找到不在 df2 中的行的索引,然后使用该索引从 df1 中获取对应的数据。
总结:在 R 中,可以使用 merge()
函数和 anti_join()
函数,或者 setdiff()
函数找出不在其他数据框中的行。