计算数据集中每个日期的平均值;环R

时间:2016-02-26 14:46:04

标签: r tapply

我有一个下面列出的数据框,按日期有多个条目。我想计算每天按项目计算的平均收入。输出需要在数据帧中,因为我想在ggplot中使用它。 无论我做什么,我都会得到数据的所有行中与日期相同的数据。

dataframe:
        quantity pricereal  tip   length  name     date      average
2           2        12.66 Typ-3      2m Typ-3 2m 2015-08-03  8.351814
3           1         6.87 Typ-3      2m Typ-3 2m 2015-08-03  8.351814
7           1        10.62 Typ-6      2m Typ-6 2m 2015-08-03  8.351814
49          1        12.61 Typ-4      2m Typ-4 2m 2015-08-04  8.351814
50          4        10.62 Typ-6      2m Typ-6 2m 2015-08-04  8.351814
61          2         9.14 Typ-1      2m Typ-1 2m 2015-08-05  8.351814
62          3         4.41 Typ-1      2m Typ-1 2m 2015-08-05  8.351814  
我得到的平均值显然是错误的。我写了以下语法:

data_alu$average <- NA
data_alu$average <- mean(data_alu$pricereal)

我认为解决方案是tapply然而我得到一条错误消息,因为有更多的行与一个日期相对应。

data_alu$average  <-tapply(data_alu$date, data_alu$pricereal, mean)

只是为了clerify我想要每天的意思..不是所有数据的意思

希望那里有救世主......

1 个答案:

答案 0 :(得分:0)

这是一个基础R解决方案...你几乎用tapply。 by是tapply的包装器,我觉得直观。然后获取数据框中的数据并合并它们。

df <- read.table(textConnection('       quantity pricereal  tip   length  name  length   date      average
2           2        12.66 Typ-3      2m Typ-3 2m 2015-08-03  8.351814
3           1         6.87 Typ-3      2m Typ-3 2m 2015-08-03  8.351814
7           1        10.62 Typ-6      2m Typ-6 2m 2015-08-03  8.351814
49          1        12.61 Typ-4      2m Typ-4 2m 2015-08-04  8.351814
50          4        10.62 Typ-6      2m Typ-6 2m 2015-08-04  8.351814
61          2         9.14 Typ-1      2m Typ-1 2m 2015-08-05  8.351814
62          3         4.41 Typ-1      2m Typ-1 2m 2015-08-05  8.351814  '),
                 stringsAsFactors=FALSE)
tmp <- by(df$pricereal, df$date, mean)
df2 <- data.frame(date=names(tmp),
                  mean=as.numeric(tmp),
                  stringsAsFactors=FALSE)
df$avg <- df2$mean[match(df$date, df2$date)]