Мы можем внести некоторые изменения в функцию.Прокрутите столбцы набора данных и найдите, является ли type
числовым ('i1') -> возвращает логическое значение vector
.Подмножество данных, используя вектор, циклически перебирает столбцы с lapply
и replace
NA в столбце с median
этого столбца
fun3<-function(x){
i1 <- sapply(x,is.numeric)
x[i1] <- lapply(x[i1], function(y) replace(y, is.na(y), median(y, na.rm = TRUE)))
x
}
fun3(titanic.new)
Или это можно сделать с помощьюtidyverse
library(tidyverse)
titanic.new %>%
mutate_if(is.numeric, list(~ replace(., is.na(.), median(., na.rm = TRUE))))
, который также может быть заключен в функцию
fun4 <- function(x) {
x %>%
mutate_if(is.numeric,
list(~ replace(., is.na(.), median(., na.rm = TRUE))))
}
Кроме того, это можно сделать более компактно с помощью na.aggregate
library(zoo)
i1 <- sapply(titanic.new, is.numeric)
titanic.new[i1] <- na.aggregate(titanic.new[i1], FUN = median)