以长格式查找不同的因子值

find different values in factor in long form

我有长格式的数据,类似下面

id <- c(rep(c(1L,2L,3L),3))

year <- c(rep(c(11,12,13),3))

df <- data.frame(id, year)[-c(8,3),]

df$factor <- factor(c("a", "b", "a", "c", "d","a","d"))

df

我想创建一个指标变量,它在因素发生变化时取值(例如,1 表示变化,0 表示无变化),变化出现的年份。有没有有效的方法来做到这一点?

我发现了这个问题: 这有点相关,但不涉及 ids。

您可能正在寻找:

library(dplyr)

df %>%
  group_by(id) %>%
  mutate(flag = factor != lag(factor, default = first(factor)))

#    id  year factor flag 
#  <int> <dbl> <fct>  <lgl>
#1     1    11 a      FALSE
#2     2    12 b      FALSE
#3     1    11 a      FALSE
#4     2    12 c      TRUE 
#5     3    13 d      FALSE
#6     1    11 a      FALSE
#7     3    13 d      FALSE

并在 data.table 中:

library(data.table)
setDT(df)[, flag := factor != shift(factor, fill = first(factor)), id]