如何用基础R的apply类函数将类hh:mm:ss格式时间转为总秒数?
计算hh|mm|ss格式时间的总秒数(apply类函数实现)
首先构造示例向量:
a <- c("01|15|59", "1|47|16", "01|17|20", "1|32|34", "2|17|17")
方法1:使用sapply(自动简化结果为向量)
利用strsplit将每个时间字符串拆分为时分秒的字符列表,再通过sapply遍历列表计算总秒数:
total_seconds <- sapply(strsplit(a, "|", fixed = TRUE), function(x) { x_num <- as.numeric(x) x_num[1] * 3600 + x_num[2] * 60 + x_num[3] })
运行后total_seconds的结果为:
[1] 4559 6436 4640 5554 8237
方法2:使用vapply(指定返回类型,更严谨)
如果需要明确指定返回值的类型和长度,避免意外的结果格式,推荐用vapply:
total_seconds <- vapply(strsplit(a, "|", fixed = TRUE), function(x) { x_num <- as.numeric(x) x_num[1] * 3600 + x_num[2] * 60 + x_num[3] }, FUN.VALUE = numeric(1))
简化写法(利用向量运算)
可以通过向量相乘求和的方式简化计算逻辑,代码更紧凑:
total_seconds <- sapply(strsplit(a, "|", fixed = TRUE), function(x) { sum(as.numeric(x) * c(3600, 60, 1)) })
内容的提问来源于stack exchange,提问作者Dawit Zuri
相关产品推荐
相关产品推荐

