尝试在字符串的嵌套替换中包装时间转换:
#Code
df$NewTime <- unname(sapply(sub('s','',sub("\\s+min",
"", sub("hour|hours", "* 60 +", df$traveltime))),
function(x) eval(parse(text=x))))
输出:
df
from to distance.in.km traveltime NewTime
1 1033 1076 1.8 6 mins 6
2 1035 1076 2.6 1 min 1
3 1036 1076 2.4 1 hour 26 mins 86
4 1037 1076 6.7 3 hours 1 min 181
使用的一些数据:
#Data
df <- structure(list(from = c(1033L, 1035L, 1036L, 1037L), to = c(1076L,
1076L, 1076L, 1076L), distance.in.km = c(1.8, 2.6, 2.4, 6.7),
traveltime = c("6 mins", "1 min", "1 hour 26 mins", "3 hours 1 min"
)), row.names = c(NA, -4L), class = "data.frame")
另一个使用stringr的选项:
library(stringr)
#Code 2
df$NewTime <- sapply(str_extract_all(df$traveltime, "\\d+"), function(x) {
x1 <- as.numeric(x)
if(length(x1)>1) x1[1]*60 + x1[2] else x1 })
它将产生相同的输出。