如何将时间戳(mm:ss.0)转换为r中的秒

问题描述 投票:0回答:1

我的 Excel 数据列之一中的时间采用这种格式

00:15.3
,并且在公式栏中该值显示为
12:00:05 am
。我需要将其转换为秒,使该列第一行中的时间戳为
0
秒。使用
read_excel
在 R 中读取此 Excel 文件会使第一列将值显示为
1899-12-31 00:00:16
,但原始数据中没有日期。有人可以帮忙解决这个问题吗?

r
1个回答
0
投票

列标题存在一些问题。它们似乎跨越两行,或者一行用于测量单位。我应用了修复程序,但在

read_excel()
调用中可能有更好的方法来处理它。无论如何,不影响其他的。
可以通过几种不同的方式来隔离秒,但最直接的选择可能是转换为
POSIXlt
并提取
sec
元素。也可以选择使用
strftime()
%OS4
来指定最多四位数精度的秒。最有效的方法可能是利用
POSIXct
的底层结构以十进制秒为单位(UNIX 时间)。这意味着我们可以轻松计算自 1899-12-31 00:00:00(我们的时间为零)以来经过的秒数。

dtf <- structure(list(...1=structure(c(NA, -2209075194.6,
  -2209075185.7), tzone="UTC", class=c("POSIXct", "POSIXt")),
  "C-1"=c("m/s", "23.4", "583.5"), "C-2"=c("m/s", "995.6",
  "33.53"), "C-3"=c("m/s", "26", "44"), "C-4"=c("m/s", "223.76",
  "54.9"), "C-5"=c("m/s", "65.900000000000006", "55.5"),
  "C-6"=c("m/s", "334.3", "0.45"), "C-7"=c(NA, 23.6, 44.6),
  "C- 8 "=c(NA, 243.4, 56.9)), row.names=c(NA, -3L),
  class="data.frame")

options(digits.secs=4)

colnames(dtf) <- gsub(" +NA$", "", paste(colnames(dtf), dtf[1,]))
dtf <- dtf[-1,]
dtf[,-1] <- type.convert(dtf[,-1], as.is=TRUE)

(seconds <- as.POSIXlt(dtf[,1])$sec)
# [1]  6.4000001 15.3000002

(seconds <- as.numeric(strftime(dtf[,1], "%OS4")))
# [1]  6.4 15.3

time0 <- as.POSIXct("1899-12-31 00:00:00", tz="UTC") - 1
(seconds <- as.numeric(dtf[,1] - time0))
# [1]  6.4000001 15.3000002

dtf <- cbind(seconds, dtf)
dtf[,-(5:8)]
#      seconds                ...1 C-1 m/s C-2 m/s  C-7  C- 8
# 2  6.4000001 1899-12-31 00:00:06    23.4  995.60 23.6 243.4
# 3 15.3000002 1899-12-31 00:00:15   583.5   33.53 44.6  56.9
© www.soinside.com 2019 - 2024. All rights reserved.