【问题标题】:Averaging one column every 15 rows平均每 15 行一列
【发布时间】:2017-07-20 22:37:46
【问题描述】:

我有一个包含三列的数据集(数据表):

  • 日期
  • 时间
  • 价格

数据集的间隔为一分钟,我需要将其转换为十五分钟的间隔。为此,我想要每 15 行的平均价格。我需要在一个新的数据帧中使用它(行数比原始数据少 15 倍),这样我就可以将它复制/粘贴到另一个已经有 15 分钟间隔的数据集中。

我尝试通过使用以下代码获取每 15 行的平均值来创建一个新列表:

means.price <- dt.Energy.prices[, mean(dt.Energy.prices$Lowest_price_downward), by= 
     (seq(nrow(dt.Energy.prices)) - 1) %/% 15]

我得到了一个新的数据集,其中所有的手段都是 NA。 Means.price 大约有 70.000 obs。原来有大约105万。结果是创建了一个数据集,该数据集是原始数据集的 1/15,但仍然缺少方法。

有时列价格有一个 NA。所以有时所有 15 行都是 NA,但有时 5 行具有其他 10 行具有 NA 的值。如果它是 15,我可以输出均值 NA,但是当有一些已知值时,我希望有一种方法来平均已知值。

【问题讨论】:

  • SO 不适合“请为我写这个”,尽管它偶尔会发生。这个网站的目的是关于“这个代码here不起作用,你能帮我识别/修复错误吗”。这个问题需要遵循reproducible questions的一些原则;我建议您阅读该链接以及 minimal/verifiable questions,然后返回并编辑您的问题以包含 示例数据 和您无法正常工作的相关代码。
  • 好的,谢谢!第一次使用网站!
  • 我编辑了我的评论来解释我到目前为止所做的尝试!
  • 你在找这个sapply(split(x, ceiling(seq_along(x)/15)), mean)
  • 谢谢Chirayu。我认为这行得通。只有当十五个值之一是 NA 时,我才会得到 NA。在您的代码行中,我在哪里适合 na.rm = true?

标签: r


【解决方案1】:

在避免转换为时间序列(尽管这可能有利于进一步处理此数据)的同时,一种简单的方法是在您致电mean() 时联系我们na.rm = TRUE

这是一个如何工作的示例:

> mean(c(2, 0, 0, 0))
[1] 0.5
> mean(c(2, 0, 0, NA))
[1] NA
> mean(c(2, 0, 0, NA), na.rm = TRUE)
[1] 0.6666667

从您的代码来看,Lowest_price_downward 是什么并不是很清楚,但从您描述它的方式来看,这可能会有所帮助。

means.price <- dt.Energy.prices[, mean(dt.Energy.prices$Lowest_price_downward,
                                       na.rm = TRUE),
                                  by = (seq(nrow(dt.Energy.prices)) - 1) %/% 15]`

【讨论】:

  • 嗯.. 所有 70.000 obs 的平均值为 19.26。我认为 R 计算了每个实例的整个列的平均值,而不是每 15 行的平均值。
  • 在上述帮助下了解了如何使用 sapply。你也感谢你的努力!
猜你喜欢
  • 2019-02-21
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多