【问题标题】:Aggregrate without reducing dimension of dataframe [duplicate]聚合而不减少数据框的维度[重复]
【发布时间】:2016-10-17 11:50:48
【问题描述】:

我正在尝试在 R 中使用聚合函数,我希望输出数据框的维度保持不变。例如:假设我有以下数据框

Name------Type------    Price   
Prod1-----A--------       $1
Prod2----A---------       $5
Prod3----B----------       $7
Prod4-----B---------       $9

在 R 中通过聚合类型和函数作为价格总和使用聚合函数之后。我得到以下结果:

Type-------Value
A-----------6
B-----------16 

但是,我希望数据框的维度保持不变。例如:

Name-----Type----Price----Value  
Prod1----A-------$1-------$6
Prod2----A-------$5--------$6
Prod3----B--------$7-------$16
Prod 4----B-------$9--------$16

我不想为此应用程序使用循环。请建议任何其他方式。

【问题讨论】:

    标签: r group-by aggregate dimension


    【解决方案1】:

    我们可以从base R使用ave

    df1$Value <- with(df1, paste0("$", ave(as.numeric(sub("[$]", "", Price)), 
                              Type, FUN = sum)))
    df1$Value
    #[1] "$6"  "$6"  "$16" "$16"
    

    【讨论】:

      【解决方案2】:

      使用dplyr

      library(dplyr)
      df %>% 
        group_by(Type) %>% 
        mutate(Value = sum(Price))
      

      或使用data.table

      library(data.table)
      setDT(df)[, Value := sum(Price), by = Type]
      
      #    Name Type Price Value
      #1:   P1    A     1     6
      #2:   P1    A     5     6
      #3:   P3    B     7    16
      #4:   P4    B     9    16
      

      【讨论】:

        猜你喜欢
        • 2020-09-20
        • 2019-03-28
        • 2017-11-12
        • 2018-09-19
        • 2013-04-15
        • 2018-05-23
        • 2018-12-09
        • 1970-01-01
        • 2012-02-08
        相关资源
        最近更新 更多