我有一个包含数字和名义数据的数据集。数字列具有NA,并且我希望用中值替换那些NA。对于名义数据,我只是空字符串""我喜欢用最常见的值替换它们。到目前为止我得到了这个:
replaceNA <- function(x) {
if (is.numeric(x)) {
colMedian <- median(x, na.rm = TRUE)
} else {
colMax <- names(which.max(table(x)))
}
}
如何检查每一列并替换NA和&#34;&#34;?
答案 0 :(得分:3)
尝试
replaceNA <- function(x) {
v1 <- if(is.numeric(x))
median(x, na.rm=TRUE)
else names(which.max(table(x[x!=''])))
replace(x, which(x %in% c(NA, '')), v1)
}
df1[] <- lapply(df1, replaceNA)
或者
library(dplyr)
df1 %>%
mutate_each(funs(replaceNA(.)))
set.seed(24)
df1 <- data.frame(Col1= sample(c(LETTERS[1:3], ''), 10, replace=TRUE),
Col2=sample(c(1:5, NA), 10, replace=TRUE),
Col3= sample(c(4:6, NA), 10, replace=TRUE), stringsAsFactors=FALSE)