【问题标题】:R: aggregate dataframe but different columnR:聚合数据框但不同的列
【发布时间】:2016-03-02 06:41:42
【问题描述】:

我的数据如下所示:

browsers.id browsers.label browsers.count browsers.id.1 browsers.label.1 browsers.count.1 
OS;FBSV        OS;FBSV            6        Chrome           Chrome                3 
Chrome         Chrome             86       Safari           Safari                47 
Chrome         Chrome             21       OS;FBSV          OS;FBSV               14 

我想将数据聚合或合并到:

browsers.id count
Chrome       110
OS;FBSV      20
Safari       47

我尝试使用聚合函数,

aggregate(data[ ,3], list(data$browser.id), sum)

但出现错误:

"arguments must have same length"

我可以解决它吗?谢谢。

【问题讨论】:

    标签: r merge aggregate


    【解决方案1】:

    我们对“id”和“count”列进行子集化,将“data.frame”转换为“data.table”(setDT(..),使用melt( data.table melt 可以包含多个measure 列),按“browsers.id”分组,我们得到“count”的sum

    library(data.table) 
     melt(setDT(df1[c(1,3,4,6)]), measure=patterns('id', 'count'), 
       value.name=c('browsers.id','count'))[,list(count=sum(count)) ,
             by = browsers.id]
     #   browsers.id count
     #1:     OS;FBSV    20
     #2:      Chrome   110
     #3:      Safari    47
    

    或者另一种选择是rbind 'id', 'count' 列

      rbindlist(list(df1[c(1,3)], df1[c(4,6)]))[,  
               list(count= sum(browsers.count)) ,browsers.id]
    

    【讨论】:

    • 谢谢!因为我有超过六列,所以我尝试“setDT(df1)”并且它有效:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多