假设我们有这些数据:
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)
谢谢!
这是另一种通用解决方案
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)