Подтвердить что ты не робот

Как преобразовать время (мм: ss) в десятичную форму в R

Я импортировал csv файл в R, используя RStudio, где я пытаюсь построить точки за игру против минут за игру. Однако минуты за игру в формате mm: ss, и мне сложно найти, как преобразовать ее в десятичную форму.

Пожалуйста, помогите!

4b9b3361

Ответ 1

Учитывая, что вы начинаете с символьного вектора, это относительно просто:

minPerGame <- c("4:30","2:20","34:10")

sapply(strsplit(minPerGame,":"),
  function(x) {
    x <- as.numeric(x)
    x[1]+x[2]/60
    }
)

дает

[1]  4.500000  2.333333 34.166667

Убедитесь, что вы проверили, что вы использовали read.csv() с опцией as.is=TRUE. В противном случае вам придется преобразовать с помощью as.character().

Ответ 2

Нужно ли его демимиализировать? Если вы храните данные в правильном формате, например, в качестве объекта класса POSIXlt, один из R-классов времени R будет обрабатывать правильную обработку времени числовым способом. Вот пример того, что я имею в виду:

Сначала мы создаем некоторые фиктивные данные для иллюстративных целей:

set.seed(1)
DF <- data.frame(Times = seq(as.POSIXlt("10:00", format = "%M:%S"), 
                             length = 100, by = 10),
                 Points = cumsum(rpois(100, lambda = 1)))
head(DF)

Игнорируйте тот факт, что здесь есть даты, он фактически игнорируется, когда мы делаем сюжет, поскольку все наблюдения имеют одну и ту же дату. Затем мы построим это с использованием интерфейса формулы R:

plot(Points ~ Times, data = DF, type = "o")

Что производит это:

points per game time

Ответ 3

Некоторая настройка первого решения:

minPerGame <- paste(sample(1:89,100000,T),sample(0:59,100000,T),sep=":")

f1 <- function(){
sapply(strsplit(minPerGame,":"),
 function(x) {
  x <- as.numeric(x)
  x[1]+x[2]/60
 }
)
}
#
f2<- function(){
 w <- matrix(c(1,1/60),ncol=1)
 as.vector(matrix(as.numeric(unlist(strsplit(minPerGame,":"))),ncol=2,byrow=TRUE)%*%w)
}

system.time(f1())
system.time(f2())

system.time(f1()), истекшая пользовательская система    0,88 0,00 0,86

system.time(f2()), истекшая пользовательская система    0,25 0,00 0,27