2017-03-13 63 views
0

我有一個數據幀(DF)複製SUMIFS如下:新的計算列從Excel

>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

嘗試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) 
+0

這完美地工作,並很好地擴大規模。謝謝! @G。格羅騰迪克 –

0

使用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