我正在努力打破我的C模,正如你所知,它仍然存在于我的R代码中。我知道会有一种聪明的R方式来做到这一点!
尝试基本上查看DF中的一长串人员。如果每个人服用多种特定药物或甚至同一种药物的多个实例,则每个人可以有多行。每行有一个药品名称条目。类似于:
patientID drugname
1 A
2 A
2 B
3 C
3 C
4 A
我有一个列表,其中包含此DF(A,B,C)中的独特药物名称。我想建立一个包含drugname和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的每个人来获取唯一ID的列表来获取我的主要DF的子集。然后,对于每种独特的药物(这是它很慢的地方),我想知道该药物是否存在于该个体的记录中。如果存在,我想将1增加到一个条目,否则转到下一个个体的子集。
预期输出
drugname count
A 3
B 1
C 1
谢谢!
答案 0 :(得分:0)
我们可以通过&#39; drugname&#39;做一个小组。并获得&#39; patientID&#39;
的独特元素的长度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
或者在获得table
行
base R
中的unique
table(unique(df)[2])