这是我的数据框的样子:
df <- read.table(text='
Name ActivityType ActivityDate LastSaleDate NextSaleDate
John Email 1/1/2014 NA 2/1/2014
John Sale 2/1/2014 NA 3/1/2014
John Sale 3/1/2014 2/1/2014 NA
John Seminar 4/1/2014 3/1/2014 NA
John Webinar 5/1/2014 3/1/2014 NA
Tom Email 1/1/2014 NA 2/1/2015
Tom Sale 2/1/2015 NA 3/1/2015
Tom Sale 3/1/2015 2/1/2015 NA
Tom Seminar 4/1/2015 3/1/2015 NA
Tom Webinar 5/1/2015 3/1/2015 NA
', header=T)
我正在尝试通过data.table导出最右边的两列。我正在查看ActivityType = Sale的位置,并找到该销售活动类型的上一个和下一个相应的活动日期。一个相关的dplyr解决方案是
library(dplyr)
require(zoo)
df %>%
group_by(Name) %>%
mutate(LastSaleDate=na.locf(lag(ifelse(ActivityType=="Sale",ActivityDate,NA)),na.rm=FALSE))
非常感谢您的帮助。
这似乎可行,但是很混乱:
DT[,c("LastSaleDate", "NextSaleDate") := {
w = which(ActivityType=="Sale")
lst = rep(c(NA, w ), diff(c(0, w, .N )) )
nxt = rep(c(w , NA), diff(c(1, w, .N+1)) )
list(ActivityDate[lst], ActivityDate[nxt])
}, by=Name]
Name ActivityType ActivityDate LastSaleDate NextSaleDate
1: John Email 1/1/2014 NA 2/1/2014
2: John Sale 2/1/2014 NA 3/1/2014
3: John Sale 3/1/2014 2/1/2014 NA
4: John Seminar 4/1/2014 3/1/2014 NA
5: John Webinar 5/1/2014 3/1/2014 NA
6: Tom Email 1/1/2014 NA 2/1/2015
7: Tom Sale 2/1/2015 NA 3/1/2015
8: Tom Sale 3/1/2015 2/1/2015 NA
9: Tom Seminar 4/1/2015 3/1/2015 NA
10: Tom Webinar 5/1/2015 3/1/2015 NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句