所以我有两个看起来像这样的数据集(表):
数据集A:
Email Date Action
aaaa 1/5/14 won
bbbb 2/10/14 won
cccc 1/14/14 won
dddd 3/3/14 won
eeee 4/19/14 won
Run Code Online (Sandbox Code Playgroud)
数据集B:
Email Date Action
aaaa 1/5/14 won
aaaa 1/6/14 call
aaaa 1/9/14 email
aaaa 1/20/14 email
bbbb 2/8/14 email
bbbb 2/9/14 email
bbbb 2/10/14 won
bbbb 2/11/14 callback
bbbb 2/12/14 email
bbbb 2/13/14 won
cccc 1/14/14 won
cccc 1/16/14 call
dddd 2/3/14 email
dddd 3/3/14 won
eeee 4/19/14 won
eeee 4/21/14 call
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样:
Email Date Action
bbbb 2/8/14 email
bbbb 2/9/14 email
bbbb 2/10/14 won
dddd 2/3/14 email
dddd 3/3/14 won
Run Code Online (Sandbox Code Playgroud)
所以基本上,通过电子邮件,如果首先在Action列中出现"won",我想摆脱与该电子邮件相关的所有观察.但是,如果在给定电子邮件的第一个"获胜"观察之前还有其他操作,我希望保留数据(包括观察到"获胜"的行)以及之前发生的所有事情.数据集A包含每个电子邮件的第一个观察到的"赢".数据集B包含其他所有内容和所有胜利.
我尝试过使用sqldf,但它的工作并不完全正确.任何帮助是极大的赞赏.
我不确定你需要的第一个数据是什么,这里data.table只是尝试使用你的第二个数据工作正常
library(data.table)
setDT(df2)[, if(Action[1L] != "won") .SD[seq_len(match("won", Action))], by = Email]
# Email Date Action
# 1: bbbb 2/8/14 email
# 2: bbbb 2/9/14 email
# 3: bbbb 2/10/14 won
# 4: dddd 2/3/14 email
# 5: dddd 3/3/14 won
Run Code Online (Sandbox Code Playgroud)