首页 > 解决方案 > 将带有小时和分钟的文本转换为分钟

问题描述

我有一个看起来像这样的大数据框:

距离(公里) 旅行时间
1033 1076 1.8 6 分钟
1035 1076 2.6 1分钟
1036 1076 2.4 1小时26分钟
1037 1076 6.7 3 小时 1 分钟

我想让旅行时间列以分钟为单位显示旅行时间,就像这样:

距离(公里) 旅行时间
1033 1076 1.8 6
1035 1076 2.6 1
1036 1076 2.4 86
1037 1076 6.7 181

我已经尝试过该hm()功能,但它不适用于小于 1 小时的值。

标签: rtimeextract

解决方案


尝试在字符串的嵌套替换中包装时间转换:

#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 })

它将产生相同的输出。


推荐阅读