以长格式查找不同的因子值
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]
我有长格式的数据,类似下面
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 表示无变化),变化出现的年份。有没有有效的方法来做到这一点?
我发现了这个问题:
您可能正在寻找:
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]