gpt4 book ai didi

替换 R 中缺失值的均值或模式

转载 作者:行者123 更新时间:2023-12-01 11:55:24 25 4
gpt4 key购买 nike

我有一个由混合数据类型(数字、
字符、因子、序数因子)缺失值,而我是
尝试创建一个 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

最佳答案

如果您只是删除明显的错误,那么它会按预期工作:

Mode <- function (x, na.rm) {
xtab <- table(x)
xmode <- names(which(xtab == max(xtab)))
if (length(xmode) > 1) xmode <- ">1 mode"
return(xmode)
}

# 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)

print(df_test)

# age a b
# 1 5 aa banana
# 2 8 bb apple
# 3 10 <NA> pear
# 4 12 cc grape
# 5 NA cc <NA>

for (var in 1:ncol(df_test)) {
if (class(df_test[,var])=="numeric") {
df_test[is.na(df_test[,var]),var] <- mean(df_test[,var], na.rm = TRUE)
} else if (class(df_test[,var]) %in% c("character", "factor")) {
df_test[is.na(df_test[,var]),var] <- Mode(df_test[,var], na.rm = TRUE)
}
}

print(df_test)

# age a b
# 1 5.00 aa banana
# 2 8.00 bb apple
# 3 10.00 cc pear
# 4 12.00 cc grape
# 5 8.75 cc >1 mode

我建议您使用具有语法突出显示和括号匹配功能的编辑器,这样可以更容易地找到这些类型的语法错误。

关于替换 R 中缺失值的均值或模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7731192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com