这是一个看似基本的问题,如果这是一个重复的问题,我事先表示歉意。我环顾四周,什么也没看到。
我有两个装满字符串的数据流。我想看看它们是否是彼此的精确复制品。
如果不是,我想确定哪些值是不同的。
具体而言,鉴于这一数据框架:
| 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')
)发布于 2017-01-18 20:16:38
你可以这样做:
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()用于在df1和df2的第一列之间应用%in%,如果有更多的列,则应用第二列等等。
这意味着:
> mapply(function(x,y) x%in%y,df1,df2)
x y
[1,] TRUE FALSE
[2,] TRUE FALSE
[3,] FALSE TRUE
[4,] FALSE TRUETRUE是匹配的值,我们希望将这些值转换为NA's。
https://stackoverflow.com/questions/41728123
复制相似问题