【问题标题】:how to iterate based on a condition, and assign aggregated value to a row in new dataframe in R如何根据条件进行迭代,并将聚合值分配给 R 中新数据框中的一行
【发布时间】:2017-07-11 07:57:20
【问题描述】:

我有一个包含 203615 行和 2 列(价格和时间戳)的大型股票价格数据集。以下格式

价格(美元) |时间戳

3.5 | 2014-01-01 20:00:00

2 | 2014-01-01 20:15:00

5 | 2014-01-01 20:15:00

----


4 | 2014-01-31 23:00:00

5 | 2014-01-31 23:00:00

4.5 | 2014-01-31 23:00:00

203615 2.3 | 2014-01-31 23:00:00

时间戳从“2014-01-01 20:00:00”到“2014-01-31 23:00:00”变化,间隔为 15 分钟(四舍五入为 15 分钟)。我在同一个时间戳上有几笔交易。 我必须根据时间戳对行进行分组,相差一天,并计算价格的最小值、最大值和平均值以及时间戳限制内的行数,并将它们分配给每次迭代的新数据帧中的一行,直到它到达结束时间戳("2014-01-31 23:00:00") 从开始日期('2014-01-02 20:00:00") 注意:必须每 15 分钟进行一次迭代

我试过while循环。请帮我解决这个问题并建议我是否可以使用任何软件包

【问题讨论】:

  • 使用 lubridate,有很多教程可以帮助您了解其复杂性。一旦标记被格式化,R 将允许您在 for 循环中创建 24 小时的时间窗口(您实际上可以给它 1 天或 1 小时的间隔进行迭代),然后获取该期间的最大值和最小值。最难处理的事情之一(在干净的数据中)是日期。可悲的是,您将不得不花时间弄清楚如何告诉 R 当前格式,然后给它窗口以在循环中窥视或应用函数。这是一项值得的努力,因为日期因素会不断出现!
  • 您好,感谢您的回答。我一直在使用while循环。我也会尝试 for 循环和函数
  • for (i in 97:nrow(raw)){ inter=raw$datetime[i] - as.difftime(24, unit='hours')....} 这是我自己的代码,我用它来创建时间窗口(前 24 小时)来迭代并创建最小值和最大值

标签: r


【解决方案1】:

这是我自己的代码,我用它来创建时间窗口(前 24 小时)来迭代并为我正在处理的项目创建最小值和最大值... inter 是我在循环中工作的间隔 raw 是数据框名称 i 是从 raw 中选择 datetime 列的特定行

我从第 97 行 ((i in 97:nrow(raw)) 开始我的间隔,因为邮票是以 15 分钟的间隔拍摄的,我想要一个 24 小时的后退窗口,所以我需要留下 96 个间隔来拉...我无法到达回到过去,我没有数据……所以我开始深入研究我的数据,为这些时间间隔留出空间。

for (i in 97:nrow(raw)){ inter=raw$datetime[i] - as.difftime(24, unit='hours') raw$deltaAirTemp_24[i] <-max(temp$Air.Temperature)- min(temp$Air.Temperature) }

关键是进入真正的日期时间格式。在带有日期的字段上运行 str(),如果返回的不是因子,请使用:

as.POSIXct(yourdate$field, %Y-%m-%d %H:%M:%S)

如果他们从 str(yourdatecolumn here) 作为 FACTOR 返回,则将其包装在 as.POSIXct(as.character(yourdate$field), %Y-%m-%d %H:%M:%S) 中,以确保它不会将日期强制转换为级别编号然后时间..

将它们转换为一致的日期格式,然后构造类似上面的内容来提取您需要的时间段。 difftime 在基础包中并且运行良好,您可以使用正负区间。我希望他的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2022-01-19
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多