Я работаю с данными панели, где одна и та же переменная записывается несколько раз, чтобы создать последовательность состояний.Я только хочу использовать наблюдения, которые не имеют однородных последовательностей, но я изо всех сил пытаюсь создать флаг, который бы идентифицировал их, но также не рассматривал NA как другое состояние.
Я создал пример набора данных, чтобы упростить задачу:
ID <- c(1,2,3,4,5,6,7,8,9,10)
S1 <- c("Education", "Employment", "Education", "Education", "Education", "Education", "Education", "Education", "Education", "Education")
S2 <- c("Education", "Employment", "Education", "Unemployed", "Education", "Education", "Employment", "Education", "Education", "Education")
S3 <- c("Education", "Employment", "NA", "Unemployed", "Education", "Employment", "Employment", "NA", "Education", "Education")
S4 <- c("Education", "Employment", "Education", "Unemployed", "Education", "Employment", "Employment", "NA", "Education", "Education")
S5 <- c("Education", "Employment", "Education", "Unemployed", "Education", "Employment", "Employment", "NA", "Education", "Education")
df <- data.frame(ID, S1, S2, S3, S4, S5)
df
ID S1 S2 S3 S4 S5
1 1 Education Education Education Education Education
2 2 Employment Employment Employment Employment Employment
3 3 Education Education NA Education Education
4 4 Education Unemployed Unemployed Unemployed Unemployed
5 5 Education Education Education Education Education
6 6 Education Education Employment Employment Employment
7 7 Education Employment Employment Employment Employment
8 8 Education Education NA NA NA
9 9 Education Education Education Education Education
10 10 Education Education Education Education Education
В идеале я бы мог пометить или сохранить только наблюдения ID = c ("4", "6", "7").
Я попробовал несколько подходов:
Я попытался подсчитать последовательные состояния, но это не учитывает отдельные идентификаторы
library(data.table)
setDT(df_long)
df_long[, employed := (S=="Employment")
][, e.length := with(rle(employed), rep(lengths,lengths))
][employed == 0, e.length := 0]
df_long[, education := (S=="Education")
][, edu.length := with(rle(education), rep(lengths,lengths))
][education == 0, edu.length := 0]
df_long
IЯ также пытался вручную создать переменную flag, но она не учитывает NA и, учитывая количество повторных наблюдений в моем наборе данных, она слишком ручная / отнимает много времени
df$employed[df$S1=="Education" & df$S2=="Education" & df$S3=="Education" & df$S4=="Education" & df$S5=="Education"] <- 1
df$employed
Любая помощь будет принята с благодарностью.