Я пытаюсь заменить NA в каждом столбце матрицы медианом этого столбца, однако, когда я пытаюсь использовать lapply
или sapply
, я получаю сообщение об ошибке ; код работает, когда я использую for-loop и когда я меняю один столбец за раз, что я делаю неправильно?Замена NA в каждом столбце матрицы медианом этого столбца
Пример:
set.seed(1928)
mat <- matrix(rnorm(100*110), ncol = 110)
mat[sample(1:length(mat), 700, replace = FALSE)] <- NA
mat1 <- mat2 <- mat
mat1 <- lapply(mat1,
function(n) {
mat1[is.na(mat1[,n]),n] <- median(mat1[,n], na.rm = TRUE)
}
)
for (n in 1:ncol(mat2)) {
mat2[is.na(mat2[,n]),n] <- median(mat2[,n], na.rm = TRUE)
}
Объекты 'matrix' являются векторами с размерами. 'lapply' будет перебирать каждое значение в матрице вместо столбцов. – thelatemail
Если вы чувствуете себя супер ленивым и не хотите писать свою собственную функцию, вы можете использовать 'na.roughfix' из библиотеки' randomForest'. Он автоматически заменяет все значения NA медианным/режимом в зависимости от того, является ли он числовым/множителем. – ytk
@ Jonno Bourne, если вы спрашиваете о том, что данные не являются матрицами, отредактируйте свой воспроизводимый пример, чтобы предоставить фрейм данных. Имейте в виду, что это сделало бы недействительным принятое решение ... – smci