R - 如何计算数据帧中多个条目的单数条目

时间:2018-05-18 07:01:49

标签: r

我正在努力打破我的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

谢谢!

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])