【问题标题】:Counting unique items in data frame计算数据框中的唯一项目
【发布时间】:2011-03-28 13:11:10
【问题描述】:

我想简单计算每个研究条件下的受试者数量。数据如下所示:

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

对于每个“条件”,我都会计算为该条件贡献数据的唯一 Ss 的数量。看起来这应该非常简单。

【问题讨论】:

  • 谢谢大家。好吧,我是对的,这非常简单。但是,你们都教了我四种方法,并让我更好地了解了 R 的许多软件包。

标签: r


【解决方案1】:

使用plyr 包中的ddply 函数:

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

【讨论】:

    【解决方案2】:

    使用我加载到对象 dat 中的数据的 sn-p:

    > 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
    

    【讨论】:

      【解决方案3】:

      或者,如果您喜欢 SQL 并且不介意安装软件包:

      library(sqldf);
      sqldf("select cond, count(distinct subjectid) from dat")
      

      【讨论】:

        【解决方案4】:

        为了给你更多选择,你也可以使用tapply

        tapply(a$subjectid, a$cond, function(x) length(unique(x)))
        1 2 
        2 1 
        

        【讨论】:

          猜你喜欢
          • 2023-03-12
          • 1970-01-01
          • 2018-12-18
          • 1970-01-01
          • 2015-09-28
          • 1970-01-01
          • 2016-12-16
          • 2020-07-04
          • 1970-01-01
          相关资源
          最近更新 更多