【问题标题】:how to use tapply for repeated data in R如何在R中使用tapply处理重复数据
【发布时间】:2016-02-21 06:26:43
【问题描述】:

这是我的数据框:

x day month
5 1 1
4 1 1 
1 2 1
3 2 1
5 1 2
2 1 2
5 2 2
3 2 2

我需要为每个月的每一天取 x 值的总和。 我已经试过了:

tapply(DF$x, DF$day, max) 

但它没有给出正确的答案。

【问题讨论】:

    标签: r tapply


    【解决方案1】:

    试试data.table 包:

    library(data.table)
    DT<-data.table(df)
    DT[, list(Sum=sum(x)), by = c("day","month")]
    
        day month Sum
    1:   1     1  9
    2:   2     1  4
    3:   1     2  7
    4:   2     2  8
    

    使用sqldf包:

    sqldf("select  day, month, sum(x) as sum from DT group by day, month")
    

    OR 使用基本的aggregate 函数:

    aggregate(DT$x, FUN=sum, by = list(DT$day, DT$month))
    

    Frank 建议的更清洁的方法:

    aggregate(x~day+month, DT, sum)
    

    OR 使用 dplyr 包:(按照 Frank 的建议)

    DT %>% 
        group_by(day,month) %>% 
        summarise(Sum = sum(x))
    

    【讨论】:

      【解决方案2】:

      由于问题标题是关于 tapply 并且 right answer 不在 OP 的帖子中,如果我们需要交叉表格版本,tapply 的一个选项是将分组变量放在 @987654324 @ 并将FUN 指定为sum

      with(DF, tapply(x, list(day, month), FUN=sum))
      #  1 2
      #1 9 7
      #2 4 8
      

      或者这可以通过xtabs 来完成。默认选项是sum

      xtabs(x~day+month, DF)
      #    month
      #day 1 2
      #   1 9 7
      #   2 4 8
      

      或者by

      by(DF[1], DF[-1], FUN= sum)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 1970-01-01
        • 2014-09-21
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多