我有一个长期的纵向数据集,其中包括变量:ID、波动、当前工作、慢性病的发生率和自我评估的健康状况:
ID wave working Chronic SRH
451101001003 1997 1 0 0
451101020002 1997 1 0 1
451102068003 2000 1 0 1
451103041001 1997 1 0 1
451102004001 1997 0 0 0
451203011001 2004 0 0 0
421103003031 2009 1 0 0
211102009021 2000 1 1 0
对于每个参与者来说,观察的数量不等,因为有些人退出了,另一些人加入了后来的浪潮。当我研究工作条件对健康的影响时,我想从数据集中删除从未工作过的参与者,但保留那些(可能(因健康原因停止工作的参与者。换句话说,工作=0,慢性或SRH=1的参与者。
希望这是有道理的。
以下是
IDs_out <- df1[rowSums(df1[, c("working", "Chronic", "SRH")]) == 0, ]$ID
df1 <- df1[!df1$ID %in% IDs_out, ]
df1
# ID wave working Chronic SRH
#1 451101001003 1997 1 0 0
#2 451101020002 1997 1 0 1
#3 451102068003 2000 1 0 1
#4 451103041001 1997 1 0 1
#7 421103003031 2009 1 0 0
#8 211102009021 2000 1 1 0
第一步是找到列working
、Chronic
、SRH
都是0
的ID
s。在下一步中,我们从不在IDs_out
中的数据帧中筛选ID
。
数据
df1 <- structure(list(ID = c(451101001003, 451101020002, 451102068003,
451103041001, 451102004001, 451203011001, 421103003031, 211102009021
), wave = c(1997L, 1997L, 2000L, 1997L, 1997L, 2004L, 2009L,
2000L), working = c(1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L), Chronic = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 1L), SRH = c(0L, 1L, 1L, 1L, 0L, 0L,
0L, 0L)), .Names = c("ID", "wave", "working", "Chronic", "SRH"
), class = "data.frame", row.names = c(NA, -8L))