【问题标题】:New computed column replicating SUMIFS from excel从 excel 复制 SUMIFS 的新计算列
【发布时间】:2017-03-14 02:37:54
【问题描述】:

我有一个数据框(df)如下:

>date       fx      mkt_val
>03/01/2016 AUD     50
>03/01/2016 AUD     75
>03/01/2016 USD     100
>03/01/2016 USD     150
>03/02/2016 AUD     50
>03/02/2016 AUD     500
>03/02/2016 USD     150
>03/02/2016 USD     275

我希望能够在 excel 中有效地复制 SUMIFS 函数,以便获得一个新列,其中包含每个日期的每个 fx 值的总和。这样输出将如下所示:

>date       fx  mkt_val sumifs
>03/01/2016 AUD   50    125
>03/01/2016 AUD   75    125
>03/01/2016 USD   100   250
>03/01/2016 USD   150   250
>03/02/2016 AUD   50    550
>03/02/2016 AUD   500   550
>03/02/2016 USD   150   425
>03/02/2016 USD   275   425

任何指向正确方向或代码的点都会有所帮助!谢谢。

【问题讨论】:

    标签: r sumifs


    【解决方案1】:

    试试ave。不使用任何包。

    transform(DF, sumif = ave(mkt_val, date, fx, FUN = sum))
    

    给予:

            date  fx mkt_val sumif
    1 03/01/2016 AUD      50   125
    2 03/01/2016 AUD      75   125
    3 03/01/2016 USD     100   250
    4 03/01/2016 USD     150   250
    5 03/02/2016 AUD      50   550
    6 03/02/2016 AUD     500   550
    7 03/02/2016 USD     150   425
    8 03/02/2016 USD     275   425
    

    注意:可重现形式的输入是:

    Lines <- "date       fx      mkt_val
    03/01/2016 AUD     50
    03/01/2016 AUD     75
    03/01/2016 USD     100
    03/01/2016 USD     150
    03/02/2016 AUD     50
    03/02/2016 AUD     500
    03/02/2016 USD     150
    03/02/2016 USD     275"
    DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)
    

    【讨论】:

    • 这很完美,并且可以很好地扩展。谢谢! @G。格洛腾迪克
    【解决方案2】:

    使用 dplyr 库。请(通常)使用 dput 或其他可直接复制的方式提供数据,以便更容易复制。

    df <- read.delim(text="
    date fx mkt_val
    03/01/2016 AUD 50
    03/01/2016 AUD 75
    03/01/2016 USD 100
    03/01/2016 USD 150
    03/02/2016 AUD 50
    03/02/2016 AUD 500
    03/02/2016 USD 150
    03/02/2016 USD 275
    ", sep=" ", row.names=NULL)
    
    library(dplyr)
    
    # summarize
    summary <- df %>% 
      group_by(date, fx) %>%
      summarize(sumifs = sum(mkt_val)) 
    
    # join back to the original
    result <- df %>% 
      inner_join(summary, by=c("date", "fx"))
    

    结果

            date  fx mkt_val sumifs
    1 03/01/2016 AUD      50    125
    2 03/01/2016 AUD      75    125
    3 03/01/2016 USD     100    250
    4 03/01/2016 USD     150    250
    5 03/02/2016 AUD      50    550
    6 03/02/2016 AUD     500    550
    7 03/02/2016 USD     150    425
    8 03/02/2016 USD     275    425
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      相关资源
      最近更新 更多