给定hh:mm:ss格式的时间,使用基数R计算秒数

epggiuax  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(118)

我有一个character对象,它的时间格式类似于hh:mm:ss
例如,给定的矢量a

[1] "01|15|59" "1|47|16"  "01|17|20" "1|32|34"  "2|17|17"

我想计算每次测量的秒数。
对于第一个,您可以简单地执行:

a <-  as.numeric(strsplit(a, "|", fixed=TRUE)[[1]])
a[1]*60*60 + a[2]*60 + a[3]

我可以使用一个循环来遍历char对象的所有元素,但理想情况下我希望使用一个apply函数,不知道如何实现它。

8dtrkrch

8dtrkrch1#

您可以使用sapply()

sapply(strsplit(a, "\\|"), \(x) sum(as.numeric(x) * 60^(2:0)))
# [1] 4559 6436 4640 5554 8237

或者将时间字符串转换为POSIXct并将其传递给as.numeric()以获取秒数:
x一个一个一个一个x一个一个二个x

数据
a <- c("01|15|59", "1|47|16", "01|17|20", "1|32|34", "2|17|17")
hrirmatl

hrirmatl2#

注意|(竖线)需要在strsplit()中进行转义。否则,它将充当逻辑“或”,导致每个字符上的拆分。请使用[|]\\|
对于由a <- strsplit(a, '[|]')创建的列表对象,您可以使用sapply()中的[[函数提取每个列表元素。

#Splits your vector on vertical pipe, with list output
a <- strsplit(a, '[|]')
#Apply extract function across list  
3600*as.numeric( sapply(a,`[[`,1)) +
60*as.numeric( sapply(a,`[[`,2))+
as.numeric( sapply(a,`[[`,3))
[1] 4559 6436 4640 5554 8237

相关问题