【发布时间】:2019-03-29 10:14:07
【问题描述】:
我正在学习 R,我需要根据以下数据创建一个双向表:
> head(datanet)
Date & Time [Local] distance travelled
1: 18/06/2018 03:08 15.959366
2: 18/06/2018 03:12 22.535566
3: 18/06/2018 03:16 12.036834
4: 18/06/2018 03:20 18.738134
5: 18/06/2018 03:24 26.781879
6: 18/06/2018 03:28 8.341659
我想要的输出应该如下表所示,有一个 hour 列条目代表一天中的时间(一天中 24 小时的 24 个条目)和几个 dist_tra on yyyy-mm-dd 条目,每个条目的平均每小时行驶距离一天中的每个小时。像这样:
head(dist.byHour[1:3])
hour dist_tra on 06/07/2018 dist_tra on 06/08/2018
1: 00 25.834355 29.388140
2: 01 NA 8.329956
3: 02 NA 31.506390
4: 03 33.464954 20.995957
5: 04 6.406513 17.035749
6: 05 28.254438 38.803171
通过在线查找并与一些同事交谈,我得到了下面的脚本。但是,我在使用 cut() 时收到了不想要的错误消息:
library(tidyverse)
datanet$datehour <- cut(datanet[[1]], breaks = "hours")
dist.byHour <- aggregate(meters ~ datehour, datanet, mean, na.rm = TRUE)
dist.byHour$datehour <- as.POSIXct(dist.byHour$datehour)
dist.byHour$hour <- format(dist.byHour$datehour, "%H")
dist.byHour$datehour <- as.Date(dist.byHour$datehour)
dist.byHour <- dist.byHour[c(3, 1, 2)]
dist.byHour <- dist.byHour %>%
spread(datehour, -hour)
names(dist.byHour)[-1] <- paste("dist_tra on", names(dist.byHour)[-1])
错误是:
> datanet$datehour <- cut(datanet[[1]], breaks = "hours")
Error in cut.default(datanet[[1]], breaks = "hours") :
'x' must be numeric
关于如何解决这个问题的任何想法?这是我正在处理的一项重要任务,因此非常感谢任何帮助!
【问题讨论】:
-
您需要将日期时间字符串强制转换为实际的日期时间类在您使用
cut之前而不是之后。 -
@Roland 感谢您的留言。你说的强迫是什么意思?考虑到我拥有的数据类型 (
datanet),有没有一种快速的方法可以做到这一点?