R 从excel复制SUMIFS的新计算列
我有一个数据帧(df),如下所示:R 从excel复制SUMIFS的新计算列,r,sumifs,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
>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
>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
我希望能够在excel中有效地复制SUMIFS函数,以便获得一个新列,其中包含每个日期的每个外汇值的总和。这样,输出将如下所示:
>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
>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
任何指向正确方向或代码的点都会有帮助!谢谢。使用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"))
使用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"))
尝试
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)
行尝试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.GrothendieckThis工作得很好,并且扩展得很好。谢谢大家!@G.格罗森迪克