在一个集合中找到那些在另一个集合中不存在的数值对。

3

I have two datasets:

actions:

user_id,action_id,action
123,900,start
123,901,stop
124,902,stop

历史:

user_id,action_id,action
123,901,stop
124,902,stop
125,903,start

我想找到在actions数据集中user_id和action_id都有,但在history数据集中不存在的行。需要同时匹配user_id和action_id。我不关心action列是否匹配。

因此,输出将是:

user_id,action_id,action
123,900,start

或者将actions中缺失的行合并到history中:
合并后:
user_id,action_id,action
123,900,start
123,901,stop
124,902,stop
125,903,start

我只是找不到一种像“AND”那样匹配多个变量的方法。

2个回答

4
尝试使用dplyr中的anti_join函数:
library(dplyr)

anti_join(actions, history, by = c("user_id", "action_id"))

anti_join 只会找到在第一个集合中而不在第二个集合中的行。我还没有找到一个能够进行对称反连接(即,找到仅存在于两个集合中的其中一个集合中的所有行)的函数。 - Dannid

1

数据

user_id <-c(123,123,124)
action_id <-c(900,901,902)
action<-c("start","stop","stop")
actions<-data.frame(user_id, action_id, action)

user_id <-c(123,124,125)
action_id <-c(901,902,903)
action<-c("stop","stop","start")
history<-data.frame(user_id, action_id, action)

粘贴和子集

actions$m<-paste(actions$user_id, actions$action_id, sep='-')
history$m<-paste(history$user_id, history$action_id, sep='-')

subset(actions, !(m %in% history$m))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接