我有一个包含年份和年龄的两列的数据框,例如:
df <- data.frame(year = 1980:2000, age = c(40:45, 31:40, 32:36))
我需要创建一个识别每个年龄序列的分类变量。这看起来像这样:
df$seq <- as.character(c(rep(1,6), rep(2,10), rep(3,5)))
任何想法如何有效地做到这一点?我已设法为序列中断创建一个虚拟
require(dplyr)
df <- df %>% mutate(brk = case_when(age - lag(age) != 1 ~ 1, T ~ 0)
但是我在努力填补其余部分。
答案 0 :(得分:2)
你已经差不多完成了。您只需要创建cumsum
列的累计总和(brk
):
df %>% mutate(brk = cumsum(case_when(age - lag(age) != 1 ~ 1, T ~ 0)))
如果要从1而不是0开始第一个序列,可以向整个向量添加1。