我有一个主题数据集subjects
,其中包含一组与主题药物相对应的变量。从那个广泛的变量中,我在数据集中创建了一组独特的meds(无论它来自哪个特定变量)。
我想找到每个med的主题计数,这样如果一个主题列出一次或多次med,则该计数增加1。
以下是一种缓慢的方法,但我有9个med变量和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
答案 0 :(得分:2)
怎么样?
as.data.frame(table(unlist(apply(subjects, 1, unique))))
可能会有更快的方法,但它在你提到的50,000乘9的桌子上做得不错(约1.5秒)。