使用cut函数时breaks参数出错

使用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

我正在学习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()
时,出现了一条不希望出现的错误消息:

库(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