我有一个很容易回答的问题,但未能找到一个好的解决方案。
我有一个包含两列(销售和联系人)的数据框,两者都填充0或1。
sale <- c(0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0)
contact <- c(0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0)
df <- data.frame(sale = sale, contact = contact)
我想创建两个事件,一个事件之前和事件之后。后事件是两个连续触点之间的长度(包括第一个触点本身)。在这种情况下,我们将
after = c(4,4,4)
之前的事件是前两个联系人的长度。在这种情况下,我们将
before = c(3,4,4,4)
我已经包括了第一次接触的前三周。
接下来,我想计算各个时期的销售事件,包括之前和之后。所以,我想计算两次连续接触(期间之后)或之前两次接触(期间之前)之间的销售量。
目前,我正在使用diff()来计算存在联系的索引之间的差异,然后计算索引之间的销售量。类似的东西:
df$sale <- revalue(df$sale, c("0" = "np", "1" = "p"))
df$contact <- revalue(df$contact, c("0" = "n", "1" = "y"))
ik <- which(df$contact == "y") -1 ## this tell us the number of weeks
## before the event
before <- append(ik[1], diff(ik))
ct.before <- vector(mode="numeric", length = length(before))
for (i in 1:(length(before)-1)) {
p <- df$sale[before[i]:before[i+1]]
i1 <- which(p == "p")
ct.before[i] <- length(i1)
}
与之相似。
当然,上述数据框是一个简单易用的数据框。它可以更大,并且在它们之间或多或少地分开接触。
如果有更简单,更快捷的方法吗?