Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据另一列R中的引用选择行_R - Fatal编程技术网

根据另一列R中的引用选择行

根据另一列R中的引用选择行,r,R,我不确定这个标题是否真的反映了我想要做的事情。最后,我希望在ActionType列中按组选择具有特定模式的行。分组变量为email。对于每封电子邮件,如果ActionType的第一行是赢的,那么我想删除它并查看第二行。如果ActionType的第二行是赢的,那么我想删除它并移到下一行,依此类推 基本上,条件1是每封电子邮件的第一行必须是非赢的 下一步,一旦满意了,我想选择从第一行(这不是一个胜利)到下一个胜利的一切 然后,该过程将重复自身,直到按组检查完所有行。我不在乎胜利后发生的争吵,除非它们

我不确定这个标题是否真的反映了我想要做的事情。最后,我希望在
ActionType
列中按组选择具有特定模式的行。分组变量为
email
。对于每封
电子邮件
,如果
ActionType
的第一行是赢的,那么我想删除它并查看第二行。如果
ActionType
的第二行是赢的,那么我想删除它并移到下一行,依此类推

基本上,条件1是每封电子邮件的第一行必须是非赢的

下一步,一旦满意了,我想选择从第一行(这不是一个胜利)到下一个胜利的一切

然后,该过程将重复自身,直到按组检查完所有行。我不在乎胜利后发生的争吵,除非它们发生在另一场胜利之前。另外,如果两个胜利是背靠背的,那么我想选择第一个胜利之前的行(包括该胜利)。删除在之后发生的行,然后继续检查行并保留在另一个win之前的行

我曾尝试将
cumsum
dplyr
data.table
一起使用,但可能需要分几个步骤来完成

以下是我的数据的外观:

email   Action  ActionType  Date
wwww    Company won         1/17/14
wwww    Company trial       1/22/14
wwww    Event   Meeting     1/24/14
wwww    Event   Meeting     2/24/14
wwww    Gmail   Email       9/10/14
wwww    Company won         9/11/14
wwww    Company won         9/25/14
wwww    Event   Support     10/7/14
wwww    Company won         10/22/14
wwww    Company won         12/31/14
wwww    Gmail   Email       2/13/15
wwww    Gmail   Email       2/27/15
wwww    Gmail   Email       3/6/15
wwww    Gmail   Email       3/26/15
wwww    Gmail   Email       4/20/15
wwww    Gmail   Email       4/24/15
wwww    Gmail   Email       5/13/15
xxxx    Company trial       1/17/14
xxxx    Gmail   Email       1/22/14
xxxx    Event   Meeting     1/24/14
xxxx    Company won         2/24/14
xxxx    Gmail   Email       9/10/14
xxxx    Gmail   Email       9/11/14
xxxx    Gmail   Email       9/25/14
xxxx    Gmail   Email       10/7/14
xxxx    Gmail   Email       10/22/14
yyyy    Company won         1/24/14
yyyy    Company trial       2/24/14
yyyy    Task    Call        9/10/14
yyyy    Task    Call        9/11/14
yyyy    Task    Call        9/25/14
yyyy    Company won         10/7/14
yyyy    Gmail   Email       10/22/14
yyyy    Gmail   Email       12/31/14
zzzz    Company won         9/11/14
zzzz    Company won         9/25/14
zzzz    Task    Call        10/7/14
zzzz    Task    Call        10/22/14
zzzz    Company trial       12/31/14
zzzz    Gmail   Email       2/13/15
zzzz    Company won         2/27/15
zzzz    Gmail   Email       3/6/15
zzzz    Gmail   Email       3/26/15
所以我希望最终结果是这样的

email   Action  ActionType  Date
wwww    Company trial       1/22/14
wwww    Event   Meeting     1/24/14
wwww    Event   Meeting     2/24/14
wwww    Gmail   Email       9/10/14
wwww    Company won         9/11/14
wwww    Event   Support     10/7/14
wwww    Company won         10/22/14
xxxx    Company trial       1/17/14
xxxx    Gmail   Email       1/22/14
xxxx    Event   Meeting     1/24/14
xxxx    Company won         2/24/14
yyyy    Company trial       2/24/14
yyyy    Task    Call        9/10/14
yyyy    Task    Call        9/11/14
yyyy    Task    Call        9/25/14
yyyy    Company won         10/7/14
zzzz    Task    Call        10/7/14
zzzz    Task    Call        10/22/14
zzzz    Company trial       12/31/14
zzzz    Gmail   Email       2/13/15
zzzz    Company won         2/27/15
这里有一个方法:

library(data.table)

# cut off leading wins and trailing nonwins
goodi = DT[, .I[
    rev(cumsum(rev(ActionType=="won"))) > 0L &
    cumsum(ActionType!="won") > 0L
], by=email]$V1

# take the first win when there's a succession of 'em
DT[goodi, r := rleid(ActionType=="won"), by=email]
badi = DT[!is.na(r), .I[ ActionType=="won" & 1:.N > 1], by=.(email,r)]$V1
DT[, r := NULL]

DT[setdiff(goodi,badi)]
它给出了所需的输出

    email  Action ActionType     Date
 1:  wwww Company      trial  1/22/14
 2:  wwww   Event    Meeting  1/24/14
 3:  wwww   Event    Meeting  2/24/14
 4:  wwww   Gmail      Email  9/10/14
 5:  wwww Company        won  9/11/14
 6:  wwww   Event    Support  10/7/14
 7:  wwww Company        won 10/22/14
 8:  xxxx Company      trial  1/17/14
 9:  xxxx   Gmail      Email  1/22/14
10:  xxxx   Event    Meeting  1/24/14
11:  xxxx Company        won  2/24/14
12:  yyyy Company      trial  2/24/14
13:  yyyy    Task       Call  9/10/14
14:  yyyy    Task       Call  9/11/14
15:  yyyy    Task       Call  9/25/14
16:  yyyy Company        won  10/7/14
17:  zzzz    Task       Call  10/7/14
18:  zzzz    Task       Call 10/22/14
19:  zzzz Company      trial 12/31/14
20:  zzzz   Gmail      Email  2/13/15
21:  zzzz Company        won  2/27/15
    email  Action ActionType     Date

我很好奇你对cumsum的尝试是什么样子的。这似乎是这项工作的正确工具。为什么2014年2月24日xxxx公司赢得了这项工作?同样地,
zzzz Cirrus赢了2015年2月27日
xxxx公司赢了2014年2月24日
,因为它前面的动作类型不是“赢”。由于该域的前两行是“wins”,第一个条件是按组选择第一行
ActionType!='“赢”