2

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

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 表示没有变化),变化出现的年份。有没有一种有效的方法来做到这一点?

我发现了这个问题: Identifying where value changes in R data.frame column 这有点相关但不处理 id。

4

1 回答 1

1

可能,您正在寻找:

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]
于 2020-04-29T01:17:39.637 回答