我有一个数据框(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
任何指向正确方向或代码的点都会有所帮助!谢谢。
答案 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