Как преобразовать столбец типа «символ» в минуты - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть столбец с названием «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 голосов
/ 15 февраля 2019

Вы можете использовать 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 
0 голосов
/ 15 февраля 2019

Используя ввод в примечании, мы конвертируем в POSIXlt, умножаем часы на 60 и прибавляем к минутам.Пакеты не используются.

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

Примечание

Предполагается, что входные данные в воспроизводимой форме:

x <- c("2:15", "2:28", "3:02")
0 голосов
/ 15 февраля 2019

Следующее должно делать то, что вам нужно, исходя из приведенного выше примера вектора.Он использует 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))
0 голосов
/ 15 февраля 2019

Вы можете разбить каждую строку на ':', преобразовать ее в числовое значение, а затем взять перекрестное произведение с помощью 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...