如何将时间段从字符更改为数字

时间:2018-12-11 18:59:56

标签: r time

我有一个数据集,其中包含一个带有时间段的字符变量,写成这样:

16 sec
1 min, 35 sec
45 sec
3 min, 42 sec

以此类推。

分钟内将其更改为数字变量的最快方法是什么?

我不能只用min删除单词secregexr,因为变量的含义只有几秒钟,没有分钟,而且我也不知道如何在插补后的几分钟内将它们分离。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

使用lubridate软件包

x <- c("16 sec", "1 min, 35 sec", "45 sec", "3 min, 42 sec")

library(lubridate)
as.numeric(as.duration(x))
# [1]  16  95  45 222

答案 1 :(得分:2)

这是您的数据:

df <- data.frame(time.string=c("16 sec", 
                        "1 min, 35 sec", 
                        "45 sec", 
                        "3 min, 42 sec"))

现在,您可以通过将min转换为*60,将,转换为+并删除{{ 1}}。

sec

哪个会给您以下结果:

df$time.expr <- gsub(", ", "+", gsub(" min", "*60", gsub(" sec", "", df$time.string)))

现在,您可以像这样评估结果表达式:

#     time.expr
#1          16 
#2     1*60+35 
#3          45 
#4     3*60+42 

哪个会给你这个输出:

df$time.int <- sapply(parse(text=time.expr), eval)

希望有帮助。