这是一个看似基本的问题,如果这是一个重复的问题,我会提前道歉。我环顾四周,没有看到任何东西。
我有两个充满字符串的数据帧。我想看看它们是否完全相互重复。
如果不是,我想确定哪些值不同。
具体来说,鉴于此数据框:
| 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')
)
答案 0 :(得分:3)
你可以这样做:
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()
用于在%in%
和df1
的第一列之间应用df2
,然后在第二列之间应用> 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
是匹配的值,我们希望将其更改为Select *
from tb.Users u
where u.Approved = 1
and u.userID IN ( SELECT us.UserID us
FROM tb.UserStatementes us
WHERE us.LogDate between date1 and date2 )
。