r - 将带有小时和分钟的文本转换为分钟
问题描述
我有一个看起来像这样的大数据框:
从 | 到 | 距离(公里) | 旅行时间 |
---|---|---|---|
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 小时的值。
解决方案
尝试在字符串的嵌套替换中包装时间转换:
#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 })
它将产生相同的输出。
推荐阅读
- svg - 顺风 css svg 图标文本中心不起作用
- javascript - GraphQL Apollo Mutation String 不能表示传入数组的值
- powershell - Azure Batch 需要更新到 PowerShell 版本 7+
- r - 如何自定义我的 flexdashboard 的主题?
- c# - 如何修复 Enumerable.ToDictionary 中发生的 ArgumentNullException(或 NullReferenceException?)?(C# ASP.NET MVC)
- docker-compose - 链码提交失败 - 错误:tls:第一条记录看起来不像 TLS 握手 remoteaddress=VM_IPADDRESS:9051
- javascript - 在实时播放器中显示自定义错误消息
- gcc - 在 slurm 节点的 .sh 文件中使用 gcc 编译时禁用警告
- visual-studio-code - 如何更改 VS Code 右上角的背景颜色?
- javascript - 有没有办法将 1000000 格式化为 100 万美元等等?