首页 > 解决方案 > 检查两个数据帧在 R 中的同一行和同一列是否具有相同的值

问题描述

我有这两个数据框

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

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

标签: rdataframedplyr

解决方案


您可以使用mapply/ Map

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

或者如果您愿意,也可以类似map2_dblpurrrtidyverse

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

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

dfa <- dfa[names(dfb)]

推荐阅读