新计算列从excel复制SUMIFS

时间:2017-03-13 17:49:02

标签: r sumifs

我有一个数据框(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

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

2 个答案:

答案 0 :(得分:2)

试试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)

答案 1 :(得分:0)

使用dplyr ibraries。请(通常)使用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