我有以下数据框,列出每天每个类别的花费
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
对于每个类别,每天的平均支出是过去所有日子的平均值。 1,平均为1日。第二是第一和第二的平均值。第3是平均第1 +第2 +第3。
有没有解决方法呢?
答案 0 :(得分:0)
我们可以使用 dplyr 包中的 cummean 功能来计算每个类别的累积平均值;然后将结果融入新专栏:
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))
答案 1 :(得分: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
答案 2 :(得分:0)
您可以使用&#39; sqldf&#39; (https://cran.r-project.org/web/packages/sqldf/sqldf.pdf)包
install.packages(&#34; sqldf&#34;)
库(sqldf)
actualSpends&lt; - data.frame( 日期= c(&#39; 2017/01/01&#39;,&#39; 2017/01/02&#39;,&#39; 2017/01/03&#39;,&#39; 2017 / 01&#39;&#39; 2017/01/02&#39;&#39; 2017/01/03&#39), 类别=(&#39; Apple&#39;,&#39; Apple&#39;,&#39; Apple&#39;&#39; Banana&#39;&#39; Banana&#39;,&# 39;香蕉&#39), 花费= c(10,12,8,13,15,7))
sqldf(&#34;从actualSpends中选择日期,类别,总和(支出) 按日期分类,类别&#34;)