Добавление комментария в качестве ответа, поскольку оно кажется немного более быстрым и более масштабируемым (по крайней мере, на моем ПК (ubuntu R3.1.0)
Matrix(model.matrix(~ -1 + . , data=df,
contrasts.arg = lapply(df, contrasts, contrasts=FALSE)),sparse=TRUE)
Тестирование с большими данными
library(Matrix)
library(microbenchmark)
set.seed(123)
df <- data.frame(replicate(200,sample(letters[1:15], 100, TRUE)))
ben <- function() {
fList <- lapply(names(df),reformulate,intercept=FALSE)
do.call(cBind,lapply(fList,sparse.model.matrix,data=df))
}
flodel <- function(){
do.call(cBind,lapply(df, function(j)sparseMatrix(i = seq_along(j),
j = as.integer(j), x = 1)))
}
user <- function(){
Matrix(model.matrix(~ -1 + . , data=df,
contrasts.arg = lapply(df, contrasts, contrasts=FALSE)),
sparse=TRUE)
}
microbenchmark(flodel(), flodel2(), ben(), user(),times=10)
# Unit: milliseconds
# expr min lq median uq max neval
# flodel() 1002.79714 1005.70631 1100.1874 1179.84403 1192.56583 10
# flodel2() 16.62579 17.37707 18.5620 18.72137 19.19888 10
# ben() 1602.80193 1612.45177 1616.6684 1703.16246 1709.90557 10
# user() 96.80575 97.37132 101.9881 104.00750 195.87784 10
Изменить добавление обновления flodel - его clear - v. nice
Так как все время находится в IST . Замените строку IST на NULL .
>>import datetime
>>times=['Fri, 10 Feb 2010 17:24:16','Fri, 11 Feb 2010 17:24:16','Fri, 11 Feb 2019 17:24:16']
>>change_format=[]
>> for time in times:
change_format.append(datetime.datetime.strptime(time, '%a, %d %b %Y %H:%M:%S'))
>>change_format.sort()