r - 比较两个相似的数据帧并找到它们之间的不同值

标签 r dataframe

这是一个看似基本的问题,如果这是一个重复的问题,我提前道歉。我环顾四周,什么也没看到。

我有两个充满字符串的数据框。我想看看它们是否完全相同。

如果不是,我想确定哪些值不同。

具体来说,给定这个数据框:

| x | y |
|---|---|
| a | e |
| b | f |
| c | g |
| d | h |

和这个数据框:

| x | y |
|---|---|
| a | l |
| b | m |
| j | g |
| k | h |

我想生成这个结果(一个充满非匹配值的 df):

| x | y |
|---|---|
|   | l |
|   | m |
| j |   |
| k |   |

This question非常接近我的想法,但它想要找到相同的完整,而不是值。

1) 除了通过字符串匹配逐个遍历每个值之外,我认为我别无选择。我知道这个 df1 %in% df2 将测试行。但是我该如何测试每个元素呢?

2) 在我可以测试每个元素之后,我需要构建一个数据框来存储不匹配项。我不知道该怎么做。

这个想法看起来很简单,但分解起来,实现起来却显得相当复杂。在正确方向上的任何颠簸将不胜感激。

我的数据:

df1 <- data.frame(
  x = c('a', 'b', 'c', 'd'),
  y = c('e', 'f', 'g', 'h')
)


df2 <- data.frame(
  x = c('a', 'b', 'j', 'k'),
  y = c('l', 'm', 'g', 'h')
)

最佳答案

你可以这样做:

df2[mapply(function(x,y)   x%in%y ,df1,df2)]<-NA
     x    y
1 <NA>    l
2 <NA>    m
3    j <NA>
4    k <NA>

这会直接影响 df2,最好有一份副本。

解释:
mapply() 用于在 df1df2 的第一列之间应用 %in%,并且然后是第二个,依此类推。
这给出:

> mapply(function(x,y)   x%in%y,df1,df2)
         x     y
[1,]  TRUE FALSE
[2,]  TRUE FALSE
[3,] FALSE  TRUE
[4,] FALSE  TRUE

TRUE 是匹配的值,这些是我们想要更改为 NA 的

关于r - 比较两个相似的数据帧并找到它们之间的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728123/

相关文章:

python - 如何将两个二维数据框合并为一个多索引多维 Pandas 数据框?

pandas - 如何检查 pandas 数据框中一列对另一列的依赖关系

r - 如何在 R 中压缩多个 CSV 文件?

scala - Spark : Difference between collect(), take() 和 show() 转换为 DF 后的输出

r - 虚拟机上带有 Rstudio 的 mxnet 包

r - 创建特定的选择矩阵

R:来自 sqldf 的 read.csv.sql 能够成功读取一个 csv,但不能成功读取另一个 csv

python - Pandas,将字符串列与条件组合,但得到的系列的真值不明确

r - 在 R 中加载多个 RDS 文件作为自定义函数中的多个对象

Rmarkdown - 嵌入句子中