微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

中值插补后的 R 没有任何变化

如何解决中值插补后的 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?