如何将“字符”类型的列转换为分钟

时间:2019-02-15 17:26:32

标签: r

我有一个标记为“ game_length”的列,该列是角色类(例如“ 2:15”)。我正在尝试将此字符串转换为总分钟数(例如135)。

我尝试使用lubridate软件包将类更改为日期,并尝试仅使用strptime提取小时和分钟,但没有成功。我觉得也许我需要将该列分为“ game_length_hours”和“ game_length_mins”,然后将其合并为(“ game_length_hours” * 60)+(game_length_mins)。

current format:
game_length
"2:15"
"2:28"
"3:02"

expected format:
game_length
135
148
182

4 个答案:

答案 0 :(得分:1)

使用“注释”中的输入,我们将转换为POSIXlt,将小时数乘以60,然后加上分钟。不使用任何软件包。

with(as.POSIXlt(x, format = "%H:%M"), 60 * hour + min)
## [1] 135 148 182

注意

可重复输入的形式假定为:

x <- c("2:15", "2:28", "3:02")

答案 1 :(得分:0)

您可以在':'上分割每个字符串,将其转换为数字,然后与c(60, 1)取叉积。如果您不熟悉%*%,则它是矩阵乘法运算符。对于矢量,a %*% b等于sum(a*b)

sapply(strsplit(game_length, ':'), function(x) as.numeric(x) %*% c(60, 1))
# [1] 135 148 182

输入:

game_length <- c("2:15", "2:28", "3:02")

答案 2 :(得分:0)

根据上面的示例矢量,以下应做您需要的事情。它使用gsub搜索并替换模式编号冒号,返回第一个出现的数字,然后从字符串值转换为数字,然后乘以60,然后将第二个出现的数字加为秒。

game_length <- c("2:15","2:28","3:02")

as.numeric(gsub("^(\\d+):(\\d+)$","\\1",game_length))*60 +as.numeric(gsub("^(\\d+):(\\d+)$","\\2",game_length))

答案 3 :(得分:0)

您可以使用as.POSIXlt()将字符串转换为日期,并将日期的每个元素存储为列表。

x <- "2:15"
y<-as.POSIXlt(x, format="%H:%M")
y$hour*60 + y$min
> unlist(y)
   sec    min   hour   mday    mon   year   wday   yday  isdst   zone 
   "0"   "15"    "2"   "16"    "1"  "119"    "6"   "46"    "0"  "JST" 
gmtoff 
    NA