从R中的因子列中提取时间

时间:2018-02-23 10:50:21

标签: r

我想从R中的表格列sd_data $ start中提取时间,具有以下特征:

str(sd_data$start)
Factor w/ 122 levels "01/03/2017 08:00",..: 1 2 5 10 12 14 18 19 20 21 ...

我在论坛上发现了类似的问题,但到目前为止,所有答案都只给了我NAs或空值(00:00:00),所以除了专门针对我的数据集再提出问题外,没有别的选择。

我已经设法提取日期并将它们移动到表格中的新列,并且我很惊讶(至少对我来说)在几小时,几分钟和几秒钟内做同样的事情是多么困难。我必须忽略一些事情。

sd_data$start_date <- as.Date(sd_data$start,format='%d/%m/%Y')
sd_data$start_time <-  

提前感谢您帮助我找到正确的代码行来完成此任务。

这里有一个我想要做的事情的例子,以及我没有得到时间的地方。

smpldata <- "01/03/2017 08:00"
smpltime <-as.Date(as.character(smpldata),format='%d/%m/%Y %M:%S')
smpltime
# [1] 08:00 = what I would like to see
# [1] "2017-03-01" = what I am seeing

1 个答案:

答案 0 :(得分:2)

在转换为日期之前,可能使用as.character()转换为字符,因为因素类型没有很好地转换。并包括Sotos上面建议的日期格式的其他字符串元素。

sd_data$start_date <-
  as.Date(as.character(sd_data$start),
          format='%d/%m/%Y %H:%M:%S')

另一个提示是看一下lubridate包。它对于这类任务非常有用。

library(lubridate)

smpldata <- as.factor("01/03/2017 08:00")
(smpltime <-dmy_hm(as.character(smpldata)))

[1] "2017-03-01 08:00:00 UTC"

在这里你仍然可以看到日期。您可以使用hour()minute()来处理情节和其他需求的时间。

hour(smpltime)
[1] 8

minute(smpltime)
[1] 0

或者您可以使用format()功能获得您想要的内容。

format(smpltime, "%H:%M:%S")
[1] "08:00:00"

format(smpltime, "%H:%M")
[1] "08:00"