【问题标题】:checking if two dataframes have the same values at the same row and column in R检查两个数据帧在 R 中的同一行和同一列是否具有相同的值
【发布时间】:2020-05-29 12:05:44
【问题描述】:

我有这两个数据框

x = c(2,4,2,4,4,6)
y = c("hi", "xyz" ,"xyz" ,"xyz" ,"xyz" ,"xyz")
z = c(2,4,5,5,5,5)
dfa = data.frame(X = x, Y = y, Z = z)
dfa

   X  Y      Z
1  2  "hi"   2
2  4  "xyz"  4
3  2  "xyz"  5
4  4  "xyz"  5
5  4  "xyz"  5
6  6  "xyz"  5

另一个具有相同的行和列

x = c(2,7,8,2,4,6)
y = c("hi", "234" ,"xyz" ,"25" ,"xyz" ,"dfs")
z = c(20,4,5,3,1,5)
dfb = data.frame(X = x, Y = y, Z = z)
dfb

   X  Y      Z
1  2  "hi"   20
2  7  "234"  4
3  8  "xyz"  5
4  2  "25"   3
5  4  "xyz"  1
6  6  "dfs"  5

我想获取每列dfa中的值与dfb相同的次数

所以对于这个例子,输出是

    X   Y   Z
1   2   3   3

请让我知道如何进行此操作。 非常感谢

【问题讨论】:

  • 你可以试试colSums(dfa == dfb)
  • 如果答案对您有用,请点击左侧投票按钮旁边的复选标记,随时accept the answer。 :-) 每个帖子只能接受一个答案。

标签: r dataframe dplyr


【解决方案1】:

你可以使用mapply/Map

mapply(function(x, y) sum(x== y), dfa, dfb)

如果您更喜欢tidyverse,或者类似map2_dbl in purrr

purrr::map2_dbl(dfa, dfb, ~sum(.x == .y))

这是假设两个数据帧中的列的顺序相同,如果它们不是基于另一个数据帧重新排列一个数据帧。

dfa <- dfa[names(dfb)]

【讨论】:

    【解决方案2】:

    我们可以从base R使用Map

    Map(function(x, y) sum(x == y, na.rm = TRUE), dfa, dfb)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多