【问题标题】:Converting character to time in R [duplicate]在R中将字符转换为时间[重复]
【发布时间】:2016-09-04 21:06:56
【问题描述】:

我有一个时间列表,如下图:

"0:30:00"  "1:00:00"  "1:30:00"  "10:00:00" "10:30:00" "11:00:00" "11:30:00" "12:00:00" "12:30:00" "13:00:00" "13:30:00" "14:00:00" "14:30:00"

当我使用 as.Date 函数将这些转换为 R 中的日期对象时,使用以下代码:

time1<-as.Date(time,format='%H:%M:%S')

它给了我以下输出:

"2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09"

为什么会这样?我的代码或原始时间格式有问题吗?

谢谢。

【问题讨论】:

    标签: r date time


    【解决方案1】:

    我们可以使用timeschron转换为时间

    library(chron)
    times(v1)
    #[1] 00:30:00
    chron(times(v1))
    #[1] (01/01/70 00:30:00)
    

    或使用strptime 转换为日期时间对象

    r1 <- strptime(v1, format = "%H:%M:%S")
    r1
    #[1] "2016-05-10 00:30:00 IST"
    

    除了strptimePOSIXct也是可以的

    r2 <- as.POSIXct(v1, format = "%H:%M:%S")
    r2
    #[1] "2016-05-10 00:30:00 IST"
    

    strptimePOSIXct 的区别在于前者有POSIXlt 类,而后者只有POSIXct。另外,如果我们查看两者的结构,strptime 存储为list

    is.list(r1)
    #[1] TRUE
    is.list(r2)
    #[1] FALSE
    lapply(r1, I)
    r1$min
    #[1] 30
    

    另一个选项是lubridate

    library(lubridate)
    hms(v1)
    #[1] "30M 0S"
    

    这也有日期,即当前日期。

    as.Date 仅转换为“日期”。它不显示任何时间。

    数据

    v1 <- "0:30:00"
    

    【讨论】:

    • 谢谢阿克伦。我尝试了 Chron,它运行良好。我有一个包含许多列的数据集,其中 Time 是其中之一。我想将此列转换为 Chron 对象,然后按时间对数据集进行排序。这可能吗?
    • @A1122 我认为在使用chron 创建列后,使用orderdf1$Time &lt;- chron(times(df1$yourcolumn)); df1[order(df1$Time),]
    【解决方案2】:

    你也可以使用as.POSIXct

    x <- c("0:30:00",  "1:00:00",  "1:30:00",  "10:00:00", "10:30:00", "11:00:00" ,"11:30:00", "12:00:00", "12:30:00", "13:00:00", "13:30:00", "14:00:00", "14:30:00")
    
    as.POSIXct(x,format="%H:%M:%S")
    
    #[1] "2016-05-10 00:30:00 IST" "2016-05-10 01:00:00 IST" "2016-05-10 01:30:00 IST" "2016-05-10 10:00:00 IST"
    #[5] "2016-05-10 10:30:00 IST" "2016-05-10 11:00:00 IST" "2016-05-10 11:30:00 IST" "2016-05-10 12:00:00 IST"
    #[9] "2016-05-10 12:30:00 IST" "2016-05-10 13:00:00 IST" "2016-05-10 13:30:00 IST" "2016-05-10 14:00:00 IST"
    #[13] "2016-05-10 14:30:00 IST"
    

    【讨论】:

    • 好吧,您的编辑时间表明您的POSIXct 答案是在我的答案发布后添加的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2017-05-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    相关资源
    最近更新 更多