【问题标题】:r sum numbers by character and dater 按字符和日期对数字求和
【发布时间】:2021-12-07 01:09:13
【问题描述】:

我正在尝试将每个月的数值与这些数据相加:

我的数据

char  numb date
cat   1    21-01-01
cat   1    21-01-01
cat   1    21-03-01
bird  2    21-01-01
bird  2    21-01-01
bird  2    21-02-01
dog   3    21-01-01
dog   3    21-01-01
dog   3    21-02-01
dog   3    21-02-01
dog   3    21-03-01
dog   3    21-03-01

。 . .而且我似乎无法按月对每个字符进行汇总和 cbind 的总和。会导致:

char  numb  date
cat   2     21-01-01
cat   1     21-02-01
bird  4     21-01-01
bird  2     21-02-01
dog   6     21-01-01
dog   6     21-02-01
dog   6     21-03-01

我知道如何使用 numcolwise(sum) 按字符或日期对数字求和,但不能同时使用两者。 (我对如何使用 dplyr 进行分组和收集也有点模糊。)有什么想法吗?

【问题讨论】:

    标签: r sum aggregate cbind


    【解决方案1】:

    通过使用dplyr 或plyr 或data.table,

    数据

    df <- read.table(text = "char  numb date
    cat   1    21-01-01
    cat   1    21-01-01
    cat   1    21-03-01
    bird  2    21-01-01
    bird  2    21-01-01
    bird  2    21-02-01
    dog   3    21-01-01
    dog   3    21-01-01
    dog   3    21-02-01
    dog   3    21-02-01
    dog   3    21-03-01
    dog   3    21-03-01", header = T)
    

    代码dplyr

    library(dplyr)
    
    df %>%
      group_by(char, date) %>%
      summarize(numb = sum(numb))
    
      char  date      numb
      <chr> <chr>    <int>
    1 bird  21-01-01     4
    2 bird  21-02-01     2
    3 cat   21-01-01     2
    4 cat   21-03-01     1
    5 dog   21-01-01     6
    6 dog   21-02-01     6
    7 dog   21-03-01     6
    

    plyr

    ddply(df, c("char", "date"), summarise, numb = sum(numb))
    
      char     date numb
    1 bird 21-01-01    4
    2 bird 21-02-01    2
    3  cat 21-01-01    2
    4  cat 21-03-01    1
    5  dog 21-01-01    6
    6  dog 21-02-01    6
    7  dog 21-03-01    6
    

    data.table

    library(data.table)
    
    setDT(df)
    df[, .(numb = sum(numb)), by = c("char", "date")]
    
       char     date numb
    1:  cat 21-01-01    2
    2:  cat 21-03-01    1
    3: bird 21-01-01    4
    4: bird 21-02-01    2
    5:  dog 21-01-01    6
    6:  dog 21-02-01    6
    7:  dog 21-03-01    6
    

    【讨论】:

    • 这似乎行得通!非常感谢。 (当我运行 dplyr 代码时,我得到一个总数而不是每个字符的数字)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多