【问题标题】:Collapse based on row names, but list all collapsed values根据行名折叠,但列出所有折叠的值
【发布时间】:2014-11-17 16:48:24
【问题描述】:

我有一个数据框,我想根据行名折叠它,列出列中的所有值(见下文):

 name   value
 nameA  10
 nameA  3
 nameA  5
 nameB  5
 nameC  1
 nameC  44

我想生成这个输出:

 name   value
 nameA  10,3,5
 nameB  5
 nameC  1,44

我可以为此使用 aggregate() 吗?类似的方式我对 R 中的值求和?

sum

谢谢!

【问题讨论】:

    标签: r collapse


    【解决方案1】:

    您的预期输出实际上并未对任何值求和。相反,您正在连接它们。您可以在aggregate 调用中使用c 函数。

    aggregate(value ~ name, dat, c)
    #    name    value
    # 1 nameA 10, 3, 5
    # 2 nameB        5
    # 3 nameC    1, 44
    

    dat 是您的数据。

    您也可以使用paste,或toString(基本上是paste(..., collapse = ", ")。

    aggregate(value ~ name, dat, toString)
    #    name    value
    # 1 nameA 10, 3, 5
    # 2 nameB        5
    # 3 nameC    1, 44
    aggregate(value ~ name, dat, paste, collapse = ",")
    #    name  value
    # 1 nameA 10,3,5
    # 2 nameB      5
    # 3 nameC   1,44
    

    或者,您可以使用dplyr

    library(dplyr)
    group_by(dat, name) %>% summarize(value = toString(value))
    #    name    value
    # 1 nameA 10, 3, 5
    # 2 nameB        5
    # 3 nameC    1, 44
    

    【讨论】:

      【解决方案2】:

      你可以试试

      aggregate(value~name, df, I)
      #  name    value
      #1 nameA 10, 3, 5
      #2 nameB        5
      #3 nameC    1, 44
      

      或使用data.table

      library(data.table)
      setDT(df)[, list(value=list(value)), by=name]
      

      【讨论】:

        猜你喜欢
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 2021-03-17
        • 2018-12-24
        • 2023-03-25
        相关资源
        最近更新 更多