1

我有一个主题数据集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
4

1 回答 1

2

关于什么

as.data.frame(table(unlist(apply(subjects, 1, unique))))

可能有更快的方法,但它在您提到的 50,000 x 9 表上做得不错(约 1.5 秒)。

于 2012-11-30T19:18:59.060 回答