我有一个下面列出的数据框,按日期有多个条目。我想计算每天按项目计算的平均收入。输出需要在数据帧中,因为我想在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我想要每天的意思..不是所有数据的意思
希望那里有救世主......
答案 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)]