Я импортировал csv файл в R, используя RStudio, где я пытаюсь построить точки за игру против минут за игру. Однако минуты за игру в формате mm: ss, и мне сложно найти, как преобразовать ее в десятичную форму.
Пожалуйста, помогите!
Я импортировал csv файл в R, используя RStudio, где я пытаюсь построить точки за игру против минут за игру. Однако минуты за игру в формате mm: ss, и мне сложно найти, как преобразовать ее в десятичную форму.
Пожалуйста, помогите!
Учитывая, что вы начинаете с символьного вектора, это относительно просто:
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()
.
Нужно ли его демимиализировать? Если вы храните данные в правильном формате, например, в качестве объекта класса 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")
Что производит это:
Некоторая настройка первого решения:
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