У меня большой data.table с множеством пропущенных значений, разбросанных по ~ 200 тыс. Строкам и 200 столбцам. Я хотел бы как можно более эффективно преобразовать эти значения NA в нули.
Я вижу два варианта:
1: преобразовать в data.frame и использовать что-то вроде этого
2: какая-то классная команда подустановки data.table
Я буду доволен довольно эффективным решением типа 1. Преобразование в data.frame, а затем обратно в data.table не займет много времени.
Используя эти 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