在一组中查找不在另一组中的值对

时间:2015-02-09 21:24:18

标签: r

我有两个数据集:

动作:

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

我想找到其中user_id和action_id在actions数据集中但不在历史数据集的任何行中的行。它必须在单行中匹配user_id和action_id。我不关心动作列匹配。

所以输出结果为:

user_id,action_id,action
123,900,start

或者它可能将行动中缺失的行合并到历史记录中:

合并:

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

我只是没有找到以'AND'方式匹配多个变量的方法。

2 个答案:

答案 0 :(得分:4)

anti_join尝试dplyr

library(dplyr)

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

答案 1 :(得分: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))