【发布时间】:2011-12-05 13:58:07
【问题描述】:
我有一个由混合数据类型(数字、 字符,因子,序数因子)缺失值,我是 尝试创建一个 for 循环来替换缺失值 如果是数字,则使用相应列的平均值,如果是字符/因子,则使用模式。
这是我到现在为止的:
#fake array:
age<- c(5,8,10,12,NA)
a <- factor(c("aa", "bb", NA, "cc", "cc"))
b <- c("banana", "apple", "pear", "grape", NA)
df_test <- data.frame(age=age, a=a, b=b)
df_test$b <- as.character(df_test$b)
for (var in 1:ncol(df_test)) {
if (class(df_test[,var])=="numeric") {
df_test[is.na(df_test[,var]) <- mean(df_test[,var], na.rm = TRUE)
} else if (class(df_test[,var]=="character") {
Mode(df_test$var[is.na(df_test$var)], na.rm = TRUE)
}
}
“模式”是函数:
Mode <- function (x, na.rm) {
xtab <- table(x)
xmode <- names(which(xtab == max(xtab)))
if (length(xmode) > 1)
xmode <- ">1 mode"
return(xmode)
}
它似乎只是忽略了陈述,没有给出 任何错误…… 我还尝试使用索引来解决第一部分:
## create an index of missing values
index <- which(is.na(df_test)[,1], arr.ind = TRUE)
## calculate the row means and "duplicate" them to assign to appropriate cells
df_test[index] <- colMeans(df_test, na.rm = TRUE) [index["column",]]
但我收到此错误:“colMeans 中的错误(df_test,na.rm = TRUE):'x' 必须是数字”
有人知道如何解决这个问题吗?
非常感谢大家的大力帮助! -f
【问题讨论】:
-
请声明交叉发帖
-
这段代码有几个语法错误导致它无法运行。
标签: r missing-data