【问题标题】:Running function based on different column values [duplicate]基于不同列值的运行函数[重复]
【发布时间】:2017-08-23 16:18:40
【问题描述】:

我确定有人问过类似的问题,但我对 R 有点陌生,找不到有用的东西。我正在使用预测包从一年的数据中创建移动平均值。我想运行这个函数:

CityColl$cnt_ma <- ma(CityColl$clean_cnt, order=7)

但每个城市都是分开的。

我尝试过拆分和应用类似这样的函数:

CityColl$cnt_ma <- ddply(CityColl, .(city), ma(CityColl$clean_cnt, order=7))

但这似乎是非常错误的......

       start_time       city clean_cnt
   <date>      <chr>        <int>
     1 2016-01-01     Boston          242
     2 2016-01-01    Chicago          935
     3 2016-01-01 Washington         3220
     4 2016-01-01     Philly          639
     5 2016-01-02     Boston          221
     6 2016-01-02    Chicago         1421
     7 2016-01-02 Washington         4922
     8 2016-01-02     Philly          549
     9 2016-01-03     Boston          245
     10 2016-01-03    Chicago         1399

【问题讨论】:

  • 欢迎来到 StackOverflow。请查看有关如何生成minimum, complete, and verifiable example 的这些提示,以及creating a great example in R 上的这篇文章。还包括您正在使用的任何包的名称。 ma 不是基本 R 函数。
  • 复制中的例子可以在这里完美应用:CityColl$MA &lt;- ave(CityColl$clean_cnt,CityColl$city,FUN=function(v)as.numeric(ma(v,order=7)))
  • 太完美了!非常感谢您的帮助和反馈。

标签: r average plyr


【解决方案1】:

试试这个:

require(data.table)
require(forecast)

setDT(CityColl)

CityColl[, ma(city, order = 7), by = city]

【讨论】:

  • 感谢您的回复,这会产生错误“在 storage.mode(x)
  • @richardb:那是因为您使用 order=7 和一系列 2 或 3 个值(是的,当您按城市拆分时,您只会得到 2/3 值...)
  • 我拥有的数据是一年的,我只是提供了一个小样本数据的样子。以前从未发布过问题,有没有更好的方法来展示这个?
  • @richardb:您的示例还可以,也许您可​​以更改顺序(例如 order=3)并减少不同城市的数量以增加每个值的系列,但您的问题很清楚。跨度>
猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多