R 从excel复制SUMIFS的新计算列

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

我有一个数据帧(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
>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.格罗森迪克