我有一个数据框,包含以下内容:
Id final_date_time Speed
2022484408 2016-04-12 07:21:00 97
2022484405 2016-04-12 07:21:05 102
2022484402 2016-04-12 07:21:10 105
2022484407 2016-04-12 07:21:20 103
2022484408 2016-04-12 07:21:25 101
2022484408 2016-04-12 07:22:05 95
2022484410 2016-04-12 07:22:10 91
2022484408 2016-04-12 07:22:15 93
2022484421 2016-04-12 07:22:20 94
2022484408 2016-04-12 07:22:25 93
2022484421 2016-04-12 07:22:35 92
2022484421 2016-04-12 07:22:40 89
2022484447 2016-04-12 07:22:50 83
2022484488 2016-04-12 07:22:55 61
2022484411 2016-04-12 07:23:00 60
“最终日期时间”的类是POSIXct。
我怎样才能找到每分钟的“速度”平均值?
下面是dput信息:
structure(list(Id = c(2022484408, 2022484408, 2022484408, 2022484408,
2022484408, 2022484408), new_final_date = structure(c(1460438460,
1460438465, 1460438470, 1460438480, 1460438485, 1460438525), class = c("POSIXct",
"POSIXt"), tzone = ""), Value = c(97L, 102L, 105L, 103L, 101L,
95L)), row.names = c(NA, 6L), class = "data.frame")
我尝试了一个解决以前类似问题的解决方案,(更改了标签),但我无法让它工作:
library(xts)
x <- as.xts(dd[,date := as.POSIXct(date)])
period.apply(x, endpoints(x, "minutes", 15), mean)
2条答案
按热度按时间6jygbczu1#
如果您切换到
data.table
,这将变得非常容易。为此,我们首先纠正您的问题,使数据可读。我也使用data.table
,并在实际上不可读的数据中添加逗号:具有三个列名的四个实际列:现在我们已经解决了这个问题,我们将Datetime * 舍入 * 为分钟(并确保在单列中返回POSIX),然后使用
data.table
运行一个简单的聚合(这里是:mean()
)按四舍五入的分钟数。这段代码是一行代码,但在这里看起来更好,它可以有一个换行符,也可以自愿分成两行:
有一些以R为基的习惯用法可以通过
ave
或aggregate
来做同样的事情,当然也有dplyr
调用,我碰巧更喜欢data.table
。jyztefdp2#
*我假设您也要按ID分组,如果不是,请删除
Id
x[, .(avg = mean(Speed)), .(interval = cut(final_date_time, breaks = "1 min"))]