【问题标题】:Summarizing dataframe based on multiple columns基于多列汇总数据框
【发布时间】:2020-01-30 21:04:11
【问题描述】:

我在弄清楚这一点时遇到了一些麻烦。说,我有一张这样的桌子:

    Name Activity Day
1   John    cycle   1
2   John     work   1
3   Tina     work   1
4 Monika     work   1
5   Tina     swim   1
6   Tina  jogging   2
7   John     work   2
8   Tina     work   2

我想总结一下,把每个人的活动按天分组。

应该是这样的:

    Name      Activity Day
1   John    cycle;work   1
2   Tina     work;swim   1
3 Monika          work   1
4   Tina  jogging;work   2
5   John          work   2

我认为dplyr 包将是这里的答案,但我不知道该怎么做。有什么帮助吗?

谢谢!

【问题讨论】:

    标签: r aggregate summarize


    【解决方案1】:

    尝试:

    library(dplyr)
    
    dat <- tribble(~"Name", ~"Activity", ~"Day",
       "John",    "cycle",   1,
       "John",     "work" ,  1,
       "Tina",     "work",   1,
     "Monika",    "work",   1,
       "Tina",     "swim",   1,
       "Tina",  "jogging",   2,
       "John",     "work",   2,
       "Tina",     "work",  2)
    
    dat %>% 
      group_by(Name, Day) %>% 
      summarise(activity = paste(Activity, collapse = "; "))
    
    # A tibble: 5 x 3
    # Groups:   Name [3]
      Name     Day activity     
      <chr>  <dbl> <chr>        
    1 John       1 cycle; work  
    2 John       2 work         
    3 Monika     1 work         
    4 Tina       1 work; swim   
    5 Tina       2 jogging; work
    
    

    【讨论】:

    • 谢谢,@CoreyPembleton。我以前尝试过,但它似乎不起作用。它确实返回了NameDay 的所有组合,但它不聚合Activity 值。
    • @Douglas 我已经更新了分析器,它现在以“整洁”的方式给出了你想要的结果。
    【解决方案2】:

    data.table 的选项

    library(data.table)
    setDT(dat)[, .(Activity = toString(Activity)), .(Name, Day)]
    

    【讨论】:

      【解决方案3】:

      可以使用aggregate函数,例如:

      > aggregate(dat$Activity,list(dat$Name,dat$Day),as.character)
        Group.1 Group.2             x
      1    John       1   cycle, work
      2  Monika       1          work
      3    Tina       1    work, swim
      4    John       2          work
      5    Tina       2 jogging, work
      

      【讨论】:

        猜你喜欢
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 2017-05-25
        • 2016-10-12
        相关资源
        最近更新 更多