2017-04-07 96 views
3

我的数据集类有“时间”功能。该功能属于角色类。 我尽量表现的拿起根据不同的时间slot.For为此频率,我用“一刀切”的功能如下:R的切割功能

FreqPickupTime <- cut(dt$time, breaks = "hour") 

但是,我与发生下面的错误。

cut.default(dt $ time,breaks =“hour”)中的错误:'x'必须是数字。

是否有任何解决方案使用此剪切功能的字符功能。

+1

'切()'将无法在字符值工作。你是否在字段中输入日期?然后,您需要将其转换为适当的日期时间值。见'strptime'。 'cut()'函数具有日期时间(POSIXt)值的特殊属性。如果您将示例输入数据包含[可重现示例](http://stackoverflow.com/questions/5963269/how-to-make-a- great-r-reproducible-example),那将会更好,所以我们确切知道什么你的数据看起来像。 – MrFlick

回答

2

正如MrFlick所说,cut()不会将其剪切为字符。

df$time看起来像:16:42, 12:32, 03:20...

例如:

time <- paste0(round(runif(1000, 0, 23), digits = 0), ':', round(runif(1000, 1, 59), digits = 0)) 

你可以简单地做:

table(substr(time, 1, regexpr(':', time)-1)) 
+0

感谢您的示例,但它不适用于我的数据集。我的数据就像“00:28:14”。我想要使​​用基于时间段00:00- 6:00和6:00-12:00以及12:00-5:00和...... –

+0

的子集数据好吗,您是否记得更改变量在table()调用'table(substr(df $ time,1,regexpr(':',df $ time)-1))''?也许,试着发布'typeof(df $ time)'这里回来?问题是,即使您的数据按照您的说法进行了格式化,此代码也应该可以正常工作。 – Majo