gib*_*z00 1 r zoo dplyr data.table
这就是我的数据框架的样子.
dt <- read.table(text='
Name ActivityType GrpID
John Sale 1
John Sale 2
John Webinar 3
Kyle Email 1
Kyle Seminar 2
Kyle Sale 3
Kyle Webinar 4
Kyle Sale 5
Tom Email 1
Tom Video 2
Tom Seminar 3
', header=T, row.names = NULL)
Run Code Online (Sandbox Code Playgroud)
我想做3件事.
返回第一个ActivityType不是"Sale"的剩余组,但在稍后的某行中有一个ActivityType ="Sale"(如1和2中所述)并且仅显示ActivityType = Sale的第一个实例的结果.所以应该表明
Name ActivityType GrpID
Kyle Email 1
Kyle Seminar 2
Kyle Sale 3
Run Code Online (Sandbox Code Playgroud)
它不必是所描述的3个步骤.我只需要最终输出.我在考虑在data.table中使用SD功能,但不知道如何添加这些条件.我将衷心感谢你的帮助.
在data.table:
setDT(dt)
sl <- "Sale" #since we re-use it so much...
#1)
dt[ , if (!ActivityType[1L] == sl) .SD, by = Name]
#2)
dt[ , if (any(ActivityType == sl)) .SD, by = Name]
#3)
dt[ , {x <- ActivityType == sl; if(!x[1] & any(x)) .SD[1:which.max(x)]}, by = Name]
Run Code Online (Sandbox Code Playgroud)
(请注意,第三种情况包含前两种情况,所以我假设你想要三种不同的输出......否则只能坚持到最后一种情况)