2016-02-26 91 views
0

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

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但是我得到了一个错误信息,因为有更多的行与一个日期coresponding。

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

只是clerify我想每一天的意思..所有的数据

希望有救世主在那里的不平均...

+1

可以dput数据 – mtoto

+0

退房'AVE()'函数 – MrFlick

回答

0

这里有一个基础R解决方案......你几乎是用它来做的。 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)] 
+2

耶,基地-R!但不是像'dat $ average < - ave(dat $ pricereal,dat $ date)'更容易?使您不必创建两个额外的数据框。 – Heroka

+1

哇,甚至不知道'ave'存在...它是否正确匹配?如果是这样,那真棒。 – cory

相关问题