【问题标题】:How to convert a integer 123033 to time 12:30:33 format in R [duplicate]如何在R中将整数123033转换为时间12:30:33格式[重复]
【发布时间】:2019-10-09 19:13:25
【问题描述】:

我将文本文件导入R后,R在时间栏中省略了“0”。

例如:

Before import time | After import time
077250             | 77250
000002             |     2

因此,无法转换为正确的时间格式。 (从 77250 到 07:25:50)

如何将整数时间转换为正确的时间格式?

我试过了:

chron (time, "%H:%M:%S")
strptime(time, "%H:%M:%S")
time <- as.hms(time)

【问题讨论】:

  • 您是如何阅读文件的?那是一个字符串,而不是一个整数。您应该修改导入代码以将该字段视为字符串
  • 我使用 read.delim 方法导入文本文件...如何导入代码以将字段视为字符串?
  • @momoni 在问题本身中发布您的代码。
  • @momoni 在任何情况下,read.delimread.table 的别名。您可以使用as.is 参数来防止将文本字段转换为数字或因子。您可以通过colClasses 传递列类
  • 相关,可能与stackoverflow.com/q/14854485/680068重复

标签: r dataframe


【解决方案1】:

您可以使用stringr 包中的str_pad 来恢复零:

library(stringr)
time_old <- "2"
time_new <- str_pad(time_old, width = 6, side = "left", pad = 0)

那么,你应该可以使用chron函数了:

chron::chron(times = time_new, format = list(times = "hms"),
             out.format = "h:m:s")
[1] 00:00:02

【讨论】:

  • 嗨@cettt,感谢您的回复!因为,我有一些数据集必须经过这个过程,而时间列实际上是在数据框 X1 中。我怎样才能为它循环的 X[i]$time 列更改它。这样它就可以用于数据集 X2 X3 X4..
【解决方案2】:

我们可以使用sprintfstrptime/as.POSIXct

如果您已将它们作为数字阅读,请在 sprintf 中使用 %d,如果它们是字符,请使用 %s

x <- c(072550, 2)
format(strptime(sprintf("%06d", x), "%H%M%S"), "%T")
#[1] "07:25:50" "00:00:02"

x <- c("072550", "2")
format(strptime(sprintf("%06s", x), "%H%M%S"), "%T")
#[1] "07:25:50" "00:00:02"

【讨论】:

    【解决方案3】:

    This possibly duplicate question 展示了如何直接读取所需格式的数据,通过colClasses 指定您自己的格式化函数:

    setAs("character","myDate", function(from) as.Date(from, format="%Y%m%d") )
    setAs("character","myTime", function(from) chron(times = from, format = "hms", out.format = "h:m:s"))
    
    tmp <- c("1\t20080815\t072550", "2\t20100523\t000002")
    con <- textConnection(tmp)
    
    tmp2 <- read.delim(con, colClasses=c('numeric','myDate','myTime'), header=FALSE)
    

    tmp2 包含:

      V1         V2       V3
    1  1 2008-08-15 07:25:50
    2  2 2010-05-23 00:00:02
    

    read.delimread.table 的快捷方式,它设置了一些默认值并将任何额外的参数(如colClasses)直接传递给read.table

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      相关资源
      最近更新 更多