首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两种相似的数据并在它们之间找到不同的值

比较两种相似的数据并在它们之间找到不同的值
EN

Stack Overflow用户
提问于 2017-01-18 19:44:23
回答 1查看 357关注 0票数 3

这是一个看似基本的问题,如果这是一个重复的问题,我事先表示歉意。我环顾四周,什么也没看到。

我有两个装满字符串的数据流。我想看看它们是否是彼此的精确复制品。

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

具体而言,鉴于这一数据框架:

代码语言:javascript
复制
| x | y |
|---|---|
| a | e |
| b | f |
| c | g |
| d | h |

而这个数据:

代码语言:javascript
复制
| x | y |
|---|---|
| a | l |
| b | m |
| j | g |
| k | h |

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

代码语言:javascript
复制
| x | y |
|---|---|
|   | l |
|   | m |
| j |   |
| k |   |

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

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

2)在对每个元素进行测试之后,我需要构造一个数据框架来存储非匹配项。我不知道该怎么做。

这似乎是一个简单的想法,但如果将其分解,实现实际上似乎相当复杂。任何在正确方向上的颠簸都将不胜感激。

我的数据:

代码语言:javascript
复制
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')
)
EN

回答 1

Stack Overflow用户

发布于 2017-01-18 20:16:38

你可以这样做:

代码语言:javascript
复制
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%,如果有更多的列,则应用第二列等等。

这意味着:

代码语言:javascript
复制
> 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's

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41728123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档