如何解决中值插补后的 R 没有任何变化
有人知道这里会发生什么吗?我正在尝试对 NA 值进行估算,但一无所获。这是我的数据框。我包含整个内容只是因为我认为拥有完整内容而不是前 n 行可能会有所帮助:
structure(list(INDEX = 1:6,TARGET_WINS = c(39L,70L,86L,82L,75L),TEAM_BATTING_H = c(1445L,1339L,1377L,1387L,1297L,1279L),TEAM_BATTING_2B = c(194L,219L,232L,209L,186L,200L
),TEAM_BATTING_3B = c(39L,22L,35L,38L,27L,36L),TEAM_BATTING_HR = c(13L,190L,137L,96L,102L,92L),TEAM_BATTING_BB = c(143L,685L,602L,451L,472L,443L),TEAM_BATTING_SO = c(842,1075,917,922,920,973),TEAM_BASERUN_SB = c(NA,37L,46L,43L,49L,107L
),TEAM_BASERUN_CS = c(NA,28L,30L,39L,59L),TEAM_BATTING_HBP = c(NA_integer_,NA_integer_,NA_integer_
),TEAM_pitching_H = c(9364L,1347L,1396L,1279L
),TEAM_pitching_HR = c(84L,191L,97L,TEAM_pitching_BB = c(927L,689L,454L,TEAM_pitching_SO = c(5456L,1082L,917L,928L,920L,973L),TEAM_FIELDING_E = c(1011L,193L,175L,164L,138L,123L),TEAM_FIELDING_DP = c(NA,155L,153L,156L,168L,149L)),row.names = c(NA,6L),class = "data.frame")
我看看是否有任何 NA 值
any(is.na(moneyball_training_data)) # TRUE
我找到了这些 NA 值的位置:
moneyball_training_data %>% summarise(across(,~ any(is.na(.x))))
我查看具有 NA 值的变量之一的类
class(moneyball_training_data$TEAM_BATTING_SO) # numeric
我尝试用该向量的中值来估算它:
moneyball_training_data$TEAM_BATTING_SO[moneyball_training_data$TEAM_BATTING_SO == NA] <- median(moneyball_training_data$TEAM_BATTING_SO)
any(is.na(moneyball_training_data$TEAM_BATTING_SO)) # TRUE
但是当我询问是否有 NA 值时,我仍然得到 TRUE...
但也许我忘记在 medican 的函数调用中删除 NA 所以我用 na.rm = TRUE 再试一次
moneyball_training_data$TEAM_BATTING_SO[moneyball_training_data$TEAM_BATTING_SO == NA] <- median(moneyball_training_data$TEAM_BATTING_SO,na.rm = TRUE)
any(is.na(moneyball_training_data$TEAM_BATTING_SO)) # TRUE
但这行不通。所以我以另一种方式找到中值,然后使用该值进行插补:
median(moneyball_training_data$TEAM_BATTING_SO,na.rm = TRUE) # 750
moneyball_training_data$TEAM_BATTING_SO[moneyball_training_data$TEAM_BATTING_SO == NA] <- 750
any(is.na(moneyball_training_data$TEAM_BATTING_SO)) # TRUE
但这不会将 NA 值归为 750。但也许我应该使用 "" 而不是 NA:
moneyball_training_data$TEAM_BATTING_SO[moneyball_training_data$TEAM_BATTING_SO == ""] <- 750
any(is.na(moneyball_training_data$TEAM_BATTING_SO)) # TRUE
但这也行不通。有谁知道为什么这种估算不起作用?
解决方法
在创建用于子集化的 boolean
向量时,您应该使用之前和之后已经正确使用的 is.na()
。
moneyball_training_data$TEAM_BATTING_SO[is.na(moneyball_training_data$TEAM_BATTING_SO)] <- median(moneyball_training_data$TEAM_BATTING_SO,na.rm = TRUE)
any(is.na(moneyball_training_data$TEAM_BATTING_SO)) #
# [1] FALSE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。