Dplyr:计算最后 X 行的特征

Dplyr: compute features on the last X rows

我需要计算一些特征:

我有这个:

Data <- data.frame(
  user_id = rep(1:2, each=4),
  question = c("yes", "yes", "no",  "no","yes", "no", "yes", "no")
)

我想要这个:

Data2 <- data.frame(
  Data,
  nb_yes_last_2rows = c(1, 2, 1, 0, 1, 1, 1, 1)
)

解释:

  1. 从第1行来看,当前 行和上一行(不存在)包含 1 "yes".
  2. 从第2行pov开始,当前行和上一行包含2个"yes"
  3. 从第3行pov开始,当前行和上一行包含1个"yes"
  4. 从第4行pov开始,当前行和上一行包含0"yes"
  5. 警告:它涉及一个新用户,所以我没有考虑前一行与另一个用户有关的内容。 从第一行的角度来看,当前行和上一行(该用户不存在)包含 1 "yes".
  6. ...

问题:

如何以 dplyr 方式计算第二个数据集的 nb_yes_last_2rows 列?

我想这就是您要找的。你基本上想在 2

的滚动 window 中计算 "yes" 的实例
library(zoo)
library(dplyr)

Data %>%
  group_by(user_id) %>%
  mutate(nb_yes_last_2rows = rollapply(question, 2, function(x) sum(x == "yes"), 
                                       partial = TRUE, align = "right"))

# Source: local data frame [8 x 3]
# Groups: user_id
# 
#   user_id question nb_yes_last_2rows
# 1       1      yes                 1
# 2       1      yes                 2
# 3       1       no                 1
# 4       1       no                 0
# 5       2      yes                 1
# 6       2       no                 1
# 7       2      yes                 1
# 8       2       no                 1