【问题标题】:Verify all rows of Dataframe1 are present in Dataframe2验证 Dataframe1 的所有行都存在于 Dataframe2 中
【发布时间】:2015-07-12 06:08:50
【问题描述】:

示例:

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并检查dataframe1的第一行是否存在于dataframe2中。在此示例中,dataframe1 的第一行出现在 dataframe2 的第四行中。同样,我想检查 dataframe1 的所有行是否都存在于 dataframe2 中。我可以通过多个 for 循环来实现这一点。但是,我想以一种更简单、更快捷的方式来做到这一点。

【问题讨论】:

  • 你能显示预期的输出吗?也许all(do.call(paste, df1) %in% do.call(paste, df2))
  • @akrun 我是 SO 新手,所以不知道我必须接受这个解决方案。接受了。
  • 谢谢。我发布了两种可能的解决方案。显示预期的输出可能会更好。另外,行中值的顺序是否重要?
  • @akrun 两个数据框的列顺序相同 - Col1、Col2、Col3 等等。
  • 是的,它工作正常。但是,我意识到这不是我想要的。 Dataframe1 和 Dataframe2,没有确切的数据。在此示例中 - 在 Dataframe1 中,第一列中的数据是“Indian Inc.”。而在 Dataframe2 中,它是“印度”。在多个列中都是如此。我想要一个类似的匹配 - 基于 agrepl 的东西。我将把它作为一个新问题发布。

标签: r


【解决方案1】:

我们可以paste 每个数据集中的行 (do.call(paste,...)) 并使用 %in%. The output will be a logical vector. Ifallthe values from thepaste 比较它们,'df1' 中的输出存在于 'df2' 中,它会给出 'TRUE' 或否则'假

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

另一个选项是使用来自 `dplyr' 的anti_join。如果在“df2”中找到“df1”中的所有行,则输出将为“0”行。

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

【讨论】:

    【解决方案2】:

    基础包。如果所有都存在则为 TRUE,否则为 FALSE:

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

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 2021-12-03
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2021-05-22
      • 2019-12-29
      相关资源
      最近更新 更多