如何转换char字符串,如" 70分钟" ," 1小时30分钟"和N / A到数据帧中的数字类型

时间:2017-03-03 04:33:31

标签: r

我有一个数据框,其中我有一个具有运行时值的列作为" 70分钟"或者" 1小时30分钟"和N / A等我想将这些值转换为数字,例如70分钟应该是70分钟,1小时30分钟应该是90分。此外,我想保持N / A不变。

a<- c("70 min", "1 hr 30 Min")
typeof(a)

a <- as.numeric(a)

当我尝试as.numeric时,它将所有内容都转换为NA,一些使用lubridate包的实验也让我很失望。请任何专家建议。

1 个答案:

答案 0 :(得分:2)

重复链接对我来说并不特别开胃,所以我将提供以下基于正则表达式的解决方案。假设您的非标准时间戳采用固定且已知的格式,我们可以使用正则表达式来提取各个部分。假设您只有小时和分钟信息,您可以尝试:

a <- c("70 min", "1 hr 30 Min", "Blah")
hrs <- as.numeric(gsub(".*?(\\d+) [Hh]rs?.*", "\\1", a))
hrs[is.na(hrs)] <- 0
min <- as.numeric(gsub(".*?(\\d+) [Mm]in.*", "\\1", a))
min[is.na(min)] <- 0

total <- hrs*60 + min

<强>输出:

> min
[1]  0 30  0
> hrs
[1] 0 1 0
> total
[1]  0 90  0