【问题标题】:R Reshape - Sum and CombineR Reshape - 求和并合并
【发布时间】:2015-01-23 21:57:26
【问题描述】:

我确信这真的很简单,但我无法让它工作

我需要对两个值求和,而其他列使用 reshape/melt 保持不变:

数据如下所示:

   ID         Value
1 2850508     1010.58828
2 2850508     94.37286

期望的输出:

   ID         Variable  Value
1 2850508     Cost     1104.96114

电流输出:

   ID         Variable  Value
1 2850508     Cost     1010.58828
2 2850508     Cost      94.37286

当前代码:

Sum <- melt(Data, id="ID", measured="Cost")

任何帮助将不胜感激!

【问题讨论】:

    标签: r sum reshape


    【解决方案1】:

    您也可以只使用aggregate 函数。

    aggregate(formula = . ~ ID, 
              data = Data , 
              FUN = sum)
    ##        ID    Value
    ## 1 2850508 1104.961
    

    要获得所需的输出,您必须 cbind 并重新排列:

    cbind(aggregate(formula = . ~ ID, 
                    data = Data , 
                    FUN = sum), 
          Variable = "Cost")[, c("ID", "Variable", "Value")]
    

    【讨论】:

    • 完美...它又好又快!
    【解决方案2】:

    使用dplyr:(我又添加了两个ID,所以会有更多数据):

    d 是你的数据

    d %>%
      group_by(ID) %>%
      summarise(Value=sum(Value)) %>%
      mutate(Variable="Cost") %>%
      select(ID,Variable,Value)
    
    
    
          ID Variable    Value
    1 2850508     Cost 1104.961
    2 2850509     Cost 1164.961
    3 2850510     Cost 1047.961
    

    【讨论】:

    • 包“dplyr”不可用(适用于 R 版本 2.15.0)
    • 您不能更新到R 的新版本吗?如果可以的话,我强烈建议您这样做。
    • 工作电脑...我会好好问的!
    • 获取这些管理员权限。 RRStudio 等的新版本。能够根据需要进行更新总是好的。但是,如果您的不支持dplyr(以及谁知道还有多少其他很棒的软件包),请务必获得最新版本的RR 目前在 3.1.2
    • 感谢您的帮助 Andrew,我们会尽快升级
    【解决方案3】:

    data.table也很简单

    library(data.table)
    setDT(df)[, .(Variable = "Cost", Value = sum(Value)) , ID]
    #         ID Variable    Value
    # 1: 2850508     Cost 1104.961
    

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2022-01-21
      相关资源
      最近更新 更多