У меня есть функция, которую я использую для обработки NA
в R
, но ее запуск на большом наборе данных может занять некоторое время. Мне было любопытно, есть ли у кого-нибудь предложения по улучшению производительности. Общий смысл этого заключается в том, что если столбец имеет числовое значение NA
, оно преобразуется в -1000
и добавляется столбец флагов, а если это фактор NA, вызывается функция addNA()
.
Вот набор данных:
df1 <- data.frame(id = 1:20, target = round(runif(20),0), col1 = runif(20), col2 = runif(20), col3 = factor(letters[1:20]))
set.seed(456)
df1[sample(1:nrow(df1),5),'col1'] <- NA
df1[sample(1:nrow(df1),5),'col2'] <- NA
df1[sample(1:nrow(df1),5),'col3'] <- NA
Вот функция и использование:
varsToUse <- c('col1','col2','col3')
fixNa <- function(x, varList){
for(i in 1:length(varList)){ # i = 1
colNam1 <- varList[i]
if(class(x[,colNam1]) %in% c('numeric','integer')){
newColName <- paste(colNam1,'_isNA',sep='')
x[,newColName] <- ifelse(is.na(x[,colNam1]), 1, 0)
x[,colNam1] <- ifelse(is.na(x[,colNam1]), -1000, x[,colNam1])
varList <- c(varList, newColName)
print(i);flush.console()
}
if(class(x[,colNam1]) %in% c('factor')){
x[,colNam1] <- addNA(x[,colNam1])
}
}
return(x)
}
df1 <- fixNa(df1, varsToUse)
Какие-либо предложения?