2017-08-31 61 views
-2

創建累積方式新的專欄中,我有以下的數據幀,上市花費了每個類別的每一天的R - 由

Dataframe: actualSpends 
Date   Category Spend ($) 
2017/01/01 Apple  10 
2017/01/02 Apple  12 
2017/01/03 Apple  8 
2017/01/01 Banana 13 
2017/01/02 Banana 15 
2017/01/03 Banana 7 

我想創建一個新的數據幀會列出平均每個類別的金額花費,用於每月的每一天。 (例如,在本月3日,平均支出已經在一個月過去了,從1日至每個月的31日的每一天。)

編輯: 所以輸出應該是這個樣子..

Date   Category AvgSpend ($) 
2017/01/01 Apple  10 
2017/01/02 Apple  11 
2017/01/03 Apple  10 
2017/01/01 Banana 13 
2017/01/02 Banana 14 
2017/01/03 Banana 11.7 

對於每個類別而言,每天平均花費是過去所有日子的平均花費。第一,是第一的平均值。 2nd是平均1 + 2。 3rd是第1 + 2 + 3的平均值。

有沒有解決方法?

+0

[data.frame中的每個組的平均值]的可能重複(https://stackoverflow.com/questions/21982987/mean-per-group-in-a-data-框架) –

+0

現在我知道你正在尋找累積手段,我已經重做了我的答案,以簡潔地解決這個問題。如果這能解決你的問題,請接受答案,以便將來有同樣問題的人可以更快地找到答案。 – www

回答

0

我們可以使用cummean函數從dplyr包來計算每個類別累積平均值;然後熔融結果放入一個新列:

library(dplyr) 
library(reshape2) 

unq <- unique(df$Category) 

df$AvgSpend <- melt(
    sapply(1:length(unq), 
    function(i) cummean(df$Spending[which(df$Category==unq[i])])))$value 

輸出:

 Date Category Spending AvgSpend 
1 2017/01/01 Apple  10 10.00000 
2 2017/01/02 Apple  12 11.00000 
3 2017/01/03 Apple  8 10.00000 
4 2017/01/01 Banana  13 13.00000 
5 2017/01/02 Banana  15 14.00000 
6 2017/01/03 Banana  7 11.66667 

樣本數據:

df <- data.frame(Date=c("2017/01/01","2017/01/02","2017/01/03", 
         "2017/01/01","2017/01/02","2017/01/03"), 
       Category=c("Apple","Apple","Apple", 
          "Banana","Banana","Banana"), 
       Spending=c(10,12,8,13,15,7)) 
+0

我認爲這個功能是平均的(分組),這不是我正在尋找的。更像是,第三,該月的第一到第三日的平均花費。 – sharkiecodes

+0

這聽起來像你正在尋找的是一個累積的意思。我已經重做了我的答案,而不是給你。 – www

0

這裏是一個tidyverse選項

library(tidyverse) 
df %>% 
    group_by(Date, Category) %>% 
    summarise(Spending = mean(Spending, na.rm = TRUE)) 
# A tibble: 4 x 3 
# Groups: Date [?] 
#  Date Category Spending 
#  <fctr> <fctr> <dbl> 
#1 2017/01/01 Apple  11 
#2 2017/01/02 Banana  14 
#3 2017/01/03 Apple  8 
#4 2017/01/03 Banana  7 
0

可以使用 'sqldf'(https://cran.r-project.org/web/packages/sqldf/sqldf.pdf)封裝

install.packages( 「sqldf」)

庫(sqldf)

actualSpends < - data.frame( 日期= C('2017/01/01','2017/01/02','2017/01/03','2017/01/01','2017/01/02','2017/01/03'), Category =( (「蘋果」,「蘋果」,「蘋果」,「香蕉」,「香蕉」,「香蕉」) Spend = c(10,12,8,13,15,7)從a中選擇日期,類別,總和(支出) ctualSpends group by Date,Category「)