【问题标题】:Compare two dataframes cell by cell逐个单元格比较两个数据帧
【发布时间】:2017-09-27 06:25:07
【问题描述】:

假设我们有如下两个数据框

one <- data.frame("a" = c("aa", "bb"), "b" = c("cc", "dd"))

two <- data.frame("b" = c("aa", "bb"), "c" = c("ee", "ff"))

我要将数据帧“一”的每个单元格与数据帧“二”的每个相应单元格进行比较(不使用 for 循环)。如果内容相同,我想要一个 TRUE,如果内容不同,我想要一个FALSE。生成的 dataset 看起来像

Col1    Col2

TRUE  FALSE

TRUE  FALSE

有什么方法可以在不使用 for 循环的情况下做到这一点?

感谢您的帮助!

【问题讨论】:

  • 确保您的变量是字符,只需 one == two 就可以了

标签: r dataframe compare


【解决方案1】:

我们可以的

as.matrix(one) == as.matrix(two)

最好在data.frame 调用中使用stringsAsFactors= FALSE,以避免字符元素类转换为factors。通过转换为matrix,该类现在是character,然后使用与== 进行逐个单元格比较

【讨论】:

  • 很好的解决方案!谢谢!
【解决方案2】:

尝试以下方法:

result <- data.frame(Col1 = (as.character(one$a)==as.character(two$b)), 
                     Col2 = (as.character(one$b)==as.character(two$c)))

输出:

Col1  Col2
1 TRUE FALSE
2 TRUE FALSE

【讨论】:

  • 谢谢!但实际数据集我有超过 250 列(抱歉我没有提到),这个解决方案的代码会变得很麻烦。
【解决方案3】:

祝你好运!

你需要使用identical()

one <- data.frame("a" = c("aa", "bb"), "b" = c("cc", "dd"))

two <- data.frame("b" = c("aa", "bb"), "c" = c("ee", "ff"))

three <- data.frame("a" = c("aa", "bb"), "b" = c("cc", "dd")) ## three is identical to one


identical(one, two) #returns FALSE

identical (one, three) #returns TRUE

干杯!

【讨论】:

  • 谢谢,但我需要每个单元格中的真/假。 same() 比较整个数据帧而不是单个单元格。
猜你喜欢
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
相关资源
最近更新 更多