найти различные значения в факторе в длинной форме - PullRequest
2 голосов
/ 29 апреля 2020

У меня есть данные в длинном формате, подобном следующему

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 для без изменений), в год изменения появляются. Есть ли эффективный способ сделать это?

Я нашел этот вопрос: Определение места изменения значения в столбце R data.frame , который несколько связан, но не имеет отношения к идентификаторам.

1 Ответ

1 голос
/ 29 апреля 2020

Возможно, вы ищете:

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]
...