📌  相关文章
📜  在 R 中查找不在其他数据框中的行(1)

📅  最后修改于: 2023-12-03 15:23:17.181000             🧑  作者: Mango

在 R 中查找不在其他数据框中的行

在 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() 函数找出不在其他数据框中的行。