验证Dataframe2中是否存在Dataframe1的所有行

时间:2015-07-12 06:08:50

标签: r

例:

dataframe1 包含以下行和列。

+---------+---------+---------+---------+---------+
| Column1 | Column2 | Column3 | Column4 | Column5 |
+---------+---------+---------+---------+---------+
| A       | B       | C       | D       | E       |
| P       | Q       | R       | S       | T       |
| J       | K       | L       | M       | N       |
+---------+---------+---------+---------+---------+

dataframe2 包含以下行和列。

+---------+---------+---------+---------+---------+
| Column1 | Column2 | Column3 | Column4 | Column5 |
+---------+---------+---------+---------+---------+
| B       | D       | E       | M       | N       |
| Q       | S       | T       | R       | A       |
| M       | Q       | R       | A       | T       |
| A       | B       | C       | D       | E       |
+---------+---------+---------+---------+---------+

我想要做的是首先遍历dataframe1并检查 dataframe2 中是否存在第一行 dataframe1 。在此示例中,第一行 dataframe1 出现在 dataframe2 的第四行。同样,我想检查 dataframe2 中是否存在 dataframe1 的所有行。我可以使用多个 for 循环实现此目的。但是,我想以更简单,更快捷的方式做到这一点。

2 个答案:

答案 0 :(得分:1)

我们可以paste每个数据集中的行(do.call(paste,...)),然后使用%in%. The output will be a logical vector. If所有the values from the粘贴`输出来比较它们' df1'存在于' df2'中,它将提供' TRUE'否则' FALSE

 all(do.call(paste, df1) %in% do.call(paste, df2))

另一种选择是使用来自`dplyr'的anti_join。如果' df1'中的所有行在' df2'中找到,输出将是' 0'行。

library(dplyr)
nrow(anti_join(df1, df2))==0

答案 1 :(得分:0)

基础包。如果全部存在则为TRUE,否则为FALSE:

nrow(unique(merge(df1, df2))) == nrow(unique(df1))