我想简单计算每项研究中的受试者数量。数据看起来像这样:
subjectid cond obser variable
1234 1 1 12
1234 1 2 14
2143 2 1 19
3456 1 1 12
3456 1 2 14
3456 1 3 13
etc etc etc etc
这是一个庞大的数据集,并不总是很明显有多少独特的主题对每种情况都有贡献等。
我在data.frame中有这个。
我想要的是像
cond ofSs
1 122
2 98
对于每个“条件”,我得到对该条件贡献数据的唯一S数的计数。看起来这应该是非常简单的。
答案 0 :(得分:13)
使用ddply
包中的plyr
功能:
require(plyr)
df <- data.frame(subjectid = sample(1:3,7,T),
cond = sample(1:2,7,T), obser = sample(1:7))
> ddply(df, .(cond), summarize, NumSubs = length(unique(subjectid)))
cond NumSubs
1 1 1
2 2 2
ddply
函数通过cond
变量“拆分”数据框,并为每个子数据框生成摘要列NumSubs
。
答案 1 :(得分:5)
使用我加载到对象dat
中的数据片段:
> dat
subjectid cond obser variable
1 1234 1 1 12
2 1234 1 2 14
3 2143 2 1 19
4 3456 1 1 12
5 3456 1 2 14
6 3456 1 3 13
然后一种方法是使用聚合来计算唯一subjectid
(假设你的意思是“Ss”???
> aggregate(subjectid ~ cond, data = dat, FUN = function(x) length(unique(x)))
cond subjectid
1 1 2
2 2 1
答案 2 :(得分:4)
或者,如果您喜欢SQL并且不介意安装软件包:
library(sqldf);
sqldf("select cond, count(distinct subjectid) from dat")
答案 3 :(得分:3)
为了给你更多选择,你也可以使用tapply
tapply(a$subjectid, a$cond, function(x) length(unique(x)))
1 2
2 1