我想从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
发布于 2018-02-23 18:59:46
可能在转换为日期之前使用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"
https://stackoverflow.com/questions/48946104
复制相似问题