Самый быстрый способ замены NA в большой таблице data.table

У меня большой data.table с множеством пропущенных значений, разбросанных по ~ 200 тыс. Строкам и 200 столбцам. Я хотел бы как можно более эффективно преобразовать эти значения NA в нули.

Я вижу два варианта:
1: преобразовать в data.frame и использовать что-то вроде этого
2: какая-то классная команда подустановки data.table

Я буду доволен довольно эффективным решением типа 1. Преобразование в data.frame, а затем обратно в data.table не займет много времени.

134
задан smci 25 March 2015 в 11:37
поделиться

1 ответ

Используя эти fifelse функция от новейшего data.table версии 1.12.6, это даже в 10 раз быстрее, чем NAToUnknown в gdata пакет:

z = data.table(x = sample(c(NA_integer_, 1), 2e7, TRUE))
system.time(z[,x1:= gdata::NAToUnknown(x, 0)])

#   user  system elapsed 
#  0.798   0.323   1.173 
system.time(z[,x2:= fifelse(is.na(x), 0, x)])

#   user  system elapsed 
#  0.172   0.093   0.113 
0
ответ дан 23 November 2019 в 23:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: