使用cut函数时breaks参数出错
我正在学习R,我需要根据以下数据创建一个双向表:使用cut函数时breaks参数出错,r,cut,R,Cut,我正在学习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
> 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()
时,出现了一条不希望出现的错误消息:
库(tidyverse)
datanet$datehour实际上不需要使用cut,您可以使用组:
library(lubridate)
library(tidyverse)
# sample data
date <- c("18/06/2018 03:08", "18/06/2018 03:12", "18/06/2018 04:20", "19/06/2018 03:16", "19/06/2018 03:20", "19/06/2018 04:20")
distance <- c(15.959366, 22.535566, 12.036834, 18.738134, 12.036834, 22.535566)
df <- data.frame(date, distance)
df %>%
mutate(date = dmy_hm(date)) %>% #coerce to date object
group_by(day = date(date), hour = hour(date)) %>% # group by day and hour
summarise(dist = mean(distance)) %>% # average distance traveled in that hour
spread(day, dist) # re-arrange dataframe
库(lubridate)
图书馆(tidyverse)
#样本数据
日期%#按天和小时分组
总结(dist=平均(距离))%>%#该小时内行驶的平均距离
排列(日、距离)#重新排列数据帧
在使用cut
之前,而不是之后,您需要将datetime字符串强制为实际的datetime类。@Roland感谢您的消息。你说的胁迫是什么意思?考虑到我拥有的数据类型(datanet
),有没有一种快速的方法可以做到这一点?谢谢!这工作做得非常完美。我想知道是否有可能包含列标题,这些列标题的格式与我的原始帖子的标题(dist.byHour[1:3])
示例中的格式相同?现在,列标题的格式为yyyy-mm-dd
,而不是mm/dd/yyyy
。希望你能让我知道一些事情!要么玩弄日期格式,要么在末尾用set\u名称(c(“hour”,“dist\u tra on 06/07/2018”,“dist\u tra on 06/08/2018”))将其破解。
> datanet$datehour <- cut(datanet[[1]], breaks = "hours")
Error in cut.default(datanet[[1]], breaks = "hours") :
'x' must be numeric
library(lubridate)
library(tidyverse)
# sample data
date <- c("18/06/2018 03:08", "18/06/2018 03:12", "18/06/2018 04:20", "19/06/2018 03:16", "19/06/2018 03:20", "19/06/2018 04:20")
distance <- c(15.959366, 22.535566, 12.036834, 18.738134, 12.036834, 22.535566)
df <- data.frame(date, distance)
df %>%
mutate(date = dmy_hm(date)) %>% #coerce to date object
group_by(day = date(date), hour = hour(date)) %>% # group by day and hour
summarise(dist = mean(distance)) %>% # average distance traveled in that hour
spread(day, dist) # re-arrange dataframe