我有一个主题数据集subjects
,其中包含一组与受试者服用的药物相对应的变量。从这个广泛的变量中,我创建了数据集中所有药物的唯一集合(无论它来自哪个特定变量)。我想找到每个 med 的主题计数,这样如果一个主题列出一次或多个 med ,则该计数增加一。
下面是一种缓慢的方法,但我有 9 个医学变量和超过 50,000 个受试者。有人可以帮我找出更有效的方法吗?谢谢。
subjects <- data.table(
med1= as.factor(c("NASONEX","ALBUTEROL","","BENADRYL","THEODUR")),
med2= as.factor(c("","ALBUTEROL","ASBRON","NASONEX","MONTEKULAST")),
medrecent= as.factor(c("MONTEKLUAST","","","THEODUR",""))
)
medvarnames <- c("med1","med2","medrecent")
allmeds <- data.table(
med=subjects[,unique(unlist(sapply(.SD,levels))), .SDcols=medvarnames],
count=0
)
for(i in 1: dim(subjects)[1]){
allmeds[, count := count +
sapply(allmeds$med,function(.m){
as.integer(
any(.m == subjects[i,.SD,.SDcols=medvarnames],na.rm=TRUE)
)
})
]
}
allmeds
med count
1: 4
2: ALBUTEROL 1
3: BENADRYL 1
4: NASONEX 2
5: THEODUR 2
6: ASBRON 1
7: MONTEKULAST 1
8: MONTEKLUAST 1