假设我们有以下数据:
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.table
和base 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/