假设我们有以下数据:

dat<-data.frame(id=c(1,1,2,2,3,4,4,5,6,6),Rx=c(1,2,1,2,1,1,1,2,2,2))

   id Rx
1   1  1
2   1  2
3   2  1
4   2  2
5   3  1
6   4  1
7   4  1
8   5  2
9   6  2
10  6  2

其中,Id是主题ID,Rx是他们接受的治疗。因此,有重复的观察,并且每个受试者的治疗可能一致也可能不一致。

我希望能够总结一下,仅接受Rx 1的对象,仅接受Rx 2的对象,以及接受Rx 1和2的对象。

我更喜欢dplyr解决方案,但是data.tablebase R也可以。我想到了这样的事情:
dat %>%
  group_by(id,Rx) %>%
  unique() %>%
  ...something

最终结果应该是这样的:
  Rx    Count
   1        2
   2        2
Both        2

谢谢!

最佳答案

这是另一个通用的解决方案

library(dplyr)
dat %>%
  group_by(id) %>%
  summarise(indx = toString(sort(unique(Rx)))) %>%
  ungroup() %>%
  count(indx)

# Source: local data table [3 x 2]
#
#   indx n
# 1 1, 2 2
# 2    1 2
# 3    2 2

data.table相似
library(data.table)
setDT(dat)[, .(indx = toString(sort(unique(Rx)))), id][ , .N, indx]

关于r - 按治疗类型汇总(计数/频率),个人可以同时接受两种治疗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28326264/

10-12 17:34