R替换问题
不能在数据集中将不同列的NA值替换为具有NA值的同一列的中位数。
Titanic.new是数据集。
我尝试过:
fun3<-function(x)
{
column.numeric<-x[,sapply(x,is.numeric)]
column.numeric[which(is.na(column.numeric))]<-median(column.numeric,na.rm = TRUE)
return(column.numeric)
}
fun3(titanic.new)
我遇到错误:
neural.default(column.numeric,na.rm = TRUE)错误:
需要数字数据
我在做什么错了?
答案 0 :(得分:0)
我们可以对该函数进行一些修改。遍历数据集的列,查找type
是否为数字('i1')->返回逻辑vector
。使用向量对数据进行子集设置,使用lapply
和replace
遍历各列,并使用该列的median
遍历该列中的NA
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)