r - 通过 R 中的多个变量对纵向数据集进行子集化
问题描述
我有一个长格式的纵向数据集,其中(除其他外)变量:ID、wave、当前工作、慢性病的发生和自评健康:
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
第一步是找到ID
s 的列working
, Chronic
,SRH
都是0
。在下一步中,我们ID
从您的数据框中筛选出不在IDs_out
.
数据
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))
推荐阅读
- php - PHP Xpath 检查节点是否存在
- ruby-on-rails - 无法正确地通过rails方式或多态关系建立关系?
- apache-kafka - Kafka Log 压缩返回两条具有相同键的记录
- ios - 编程约束在 UICollectionViewCell Swift 中不起作用
- c - Waitpid 就像在非阻塞模式下一样
- android - LocationListener 在禁用时不会侦听 gps。知道我在做什么错吗?
- google-cloud-firestore - AngularFire - 如何使用快照更改并将数据作为变量返回
- ssh - 在远程服务器上运行命令将结果返回到本地处理并在远程服务器上运行另一个命令
- html - 按下回车键时表单不提交,即使有提交按钮
- c# - 有没有办法使用纯 C# 将 PDF 转换为 PDF/A(如果 Telerik 不支持它)