计算数据框中的唯一项

时间:2011-03-28 13:11:11

标签: r

我想简单计算每项研究中的受试者数量。数据看起来像这样:

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数的计数。看起来这应该是非常简单的。

4 个答案:

答案 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