我有两个数据集:
动作:
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'方式匹配多个变量的方法。
答案 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))