2017-03-01 111 views
0

我有一个数据集(数据表)有三列:平均一列,每15行

  • 日期
  • 时间
  • 价格

数据集是每隔一分钟在和我需要将其转换为十五分钟的时间间隔。要做到这一点,我想每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,但是当有一些数值已知时,我希望有一种方法来平均已知值。

+1

因为它不适用于“请为我写这篇文章”,虽然它偶尔会发生。本网站旨在说明“此处的代码*不起作用,您是否可以帮助我确定/修复此错误”。这个问题需要遵循[可重现的问题]的一些原则(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example);我建议您阅读该链接以及[最小/可验证的问题](http://stackoverflow.com/help/mcve),然后回来编辑您的问题,以包含*示例数据*和您不相关的代码。 – r2evans

+0

好的,谢谢!第一次使用网站! – Max

+0

我编辑了我的评论,以解释我到目前为止尝试过的东西! – Max

回答

0

在避免转换为时间序列(尽管这可能有利于进一步处理此数据)时,一个简单的方法是在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]` 
+0

嗯..所有的70.000 obs的平均值为19.26。我认为R计算每个实例的整个列的平均值,而不是每15行的平均值。 – Max

+0

找到了如何在上述帮助下使用sapply。你也感谢你的努力! – Max