我有一个标记为“ 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
答案 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