【问题标题】:How to compare each row of dataframe 1 with each of dataframe 2 and sum up if the values are the same?如何将数据帧 1 的每一行与数据帧 2 的每一行进行比较,如果值相同则求和?
【发布时间】:2018-11-19 20:26:12
【问题描述】:

假设您有两个大小相同的数据框,包含 TRUE、FALSE 或 NA 的条目:

df1 <- data.frame(a = c(T, F, F, F, T), b=c(F, NA, NA, F, T))
View(df1)

df2 <- data.frame(a = c(T, T, T, F, NA), b=c(T, NA, T, F, T))
View(df2)

现在您想查看 df1 的每一行中有多少条目与 df2 中的完全相同。结果应如下所示:

SumOfSimilarValuesPerRow <- data.frame(Result = c(1, 0, 0, 2, 1))
View(SumOfSimilarValuesPerRow)

所以首先你可能需要将 df1 的每一行中的每个条目与 df2 中的相同条目进行比较,然后总结结果。

我尝试了双循环,但我不断收到错误

missing value where TRUE/FALSE needed

尝试以下操作时:

for (i in 1:5) {
  for (j in 1:2) {
    if(df1[i, j] == df2[i, j]) {
      print("OK")
    } 
  }
}

我还没有尝试总结结果,因为我已经在努力比较每个条目。

有谁知道,这将如何以易于理解的方式工作?

任何帮助将不胜感激!

【问题讨论】:

  • 您确定所需输出的第 3 行是 1 吗?那里似乎没有匹配项。
  • @AntoniosK 是的,你是对的,我已经编辑过了,非常感谢!

标签: r loops dataframe matrix compare


【解决方案1】:

你可以这样做

rowSums(df1 == df2, na.rm = TRUE)

== 进行逐个元素的比较,这可以满足您的问题的要求,因为您的 df1df2 具有相同的大小(和结构)。

【讨论】:

  • 非常感谢,没想到这么简单!你帮了我很多!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
相关资源
最近更新 更多