按治疗类型汇总(计数/频率),其中个体可以接受两种治疗

And*_*lor 8 r dplyr

假设我们有这些数据:

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
Run Code Online (Sandbox Code Playgroud)

其中Id是主题ID,Rx是他们收到的治疗.因此,有重复的观察结果,每个受试者的治疗可能也可能不一致.

我希望能够总结有多少受试者仅接收Rx 1,仅接收Rx 2,以及接收Rx 1和2多少受试者.

我宁愿一个dplyr解决方案,但data.table并base R会被罚款了.我想的是:

dat %>%
  group_by(id,Rx) %>%
  unique() %>%
  ...something
Run Code Online (Sandbox Code Playgroud)

最终结果应该是这样的:

  Rx    Count
   1        2
   2        2
Both        2
Run Code Online (Sandbox Code Playgroud)

谢谢!

Dav*_*urg 5

这是另一种通用解决方案

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
Run Code Online (Sandbox Code Playgroud)

随着data.table,同样

library(data.table)
setDT(dat)[, .(indx = toString(sort(unique(Rx)))), id][ , .N, indx]
Run Code Online (Sandbox Code Playgroud)