我非常努力地试图打破我的C模式,正如你会看到的,它仍然存在于我的R代码中。我知道会有一种聪明的R方法来做这件事!
试图从本质上通过DF中持有的一长串个人。如果每个人服用了一种以上的特定药物,甚至是同一种药物的多个实例,那么每个人都可以在这个表中有多行。每行都有一个药品名称条目。类似于:
patientID drugname
1 A
2 A
2 B
3 C
3 C
4 A
我有一个列表,其中包含来自此DF (A,B,C)的唯一药物名称。我想构建一个包含drugname和drugCount列的数据帧。在drugCount中,我想要计算一种药物被开出的唯一实例的数量,而不是每个人的多次计数,更多的是一个二元运算,即“这个药物是给了X吗?”。
使用非常C风格的方式开始尝试:
uniqueDrugList <- unique(therapyDF$prodcode)
numDrugs <- length(uniqueDrugList)
prevalenceDF <-as.data.frame(drugName=character(numDrugs),drugcount=integer(numDrugs),prevalence=numeric(numDrugs),stringsAsFactors=FALSE)
for(i in 1:length(idList)) {
individualDF <- subset(therapyDF,therapyDF$patid==idList[[i]])
for(j in 1:numDrugs) {
if(uniqueDrugList[[j]] %in% individualDF%prodcode) {
prevalenceDF <---- some how tally up here
}
}
首先,我通过识别每个具有特定ID的个体来获取我的主DF的子集,以获得唯一ID的列表。然后,对于每一种独特的药物(这就是它慢的地方),我想看看该药物是否存在于该个体的记录中。我想将1加到一个条目中,如果存在,否则将移动到下一个个体的子集。
预期输出
drugname count
A 3
B 1
C 1
发布于 2018-05-18 15:13:42
我们可以通过“drugname”进行分组,并获得“patientID”的唯一元素的长度。
library(dplyr)
df %>%
group_by(drugname) %>%
summarise(count = n_distinct(patientID))
# A tibble: 3 x 2
# drugname count
# <chr> <int>
#1 A 3
#2 B 1
#3 C 1
或者在获取unique
行之后从base R
中使用table
table(unique(df)[2])
https://stackoverflow.com/questions/50405557
复制相似问题