【问题标题】:Calculating the mean for every date in a dataset; R [duplicate]计算数据集中每个日期的平均值; R [重复]
【发布时间】:2016-02-26 14:46:04
【问题描述】:

我有一个下面列出的数据框,其中按日期列出了多个条目。我想按项目计算每天的平均收入。输出需要在数据框中,因为我想在 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)

只是为了澄清我想要每天的平均值..不是所有数据的平均值

希望外面有救世主……

【问题讨论】:

  • 你能输入你的数据吗
  • 查看ave()函数

标签: r tapply


【解决方案1】:

这是一个基本的 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)]

【讨论】:

  • 耶,base-R!但是像dat$average &lt;- ave(dat$pricereal, dat$date) 这样的东西不是更容易吗?使您不必创建两个额外的数据框。
  • 哇,甚至不知道ave 存在...它是否正确匹配?如果是这样,那就太棒了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
相关资源
最近更新 更多