r - 如何替换 RStudio 中特定条件的 NA 值?
问题描述
我正在为学校学习高级商业分析课程,我们正在学习在 R Studio 中编程。
教授分享了帮助我们解决问题的提示,但我无法让它发挥作用。
我正在尝试为包含 NA 的任何高度值按性别设置平均高度。
这是教授分享的解决问题的方法,但它不起作用。数据表中没有更新:
data$height[is.na(data$height) && data$gender == "female"] = data$height[data$gender=="female"]
我试过这个:
data$height[is.na(data$height) && data$gender == "female"] = mean(data$height[data$gender=="female"])
还有这个:
data$height[is.na(data$height) && data$gender == "female"] = mean(data$height[data$gender=="female"], na.rm = TRUE)
但是得到了这个错误:
In mean.default(data$height[data$gender == "female"]) : argument is not numeric or logical: returning NA
我计算了每个性别的平均身高并尝试了这种方式,但这也不起作用。在所有情况下,高度仍然显示“NA”。
femaleMeanHeight = mean(data$height[data$gender=="female"], na.rm = TRUE)
data$height[is.na(data$height) && data$gender == "female"] = femaleMeanHeight
我不知道还能去哪里。任何帮助是极大的赞赏。
解决方案
你的代码有两个问题。第一个在data$height[is.na(data$height) && data$gender == "female"]
,第二个在mean(data$height[data$gender=="female"])
。
我们从第二个问题开始——你已经解决了。计算平均值并包括 NA 将导致 NA。因此您设置rm.na = TRUE
,因此 NA 将被忽略。(用 NA 替换 NA 没有意义或区别)
第一个问题是 && 部分。& 和 && 是有区别的。只需使用 & 而不是 && 并且您的代码可能会运行。
data$height[is.na(data$height) & data$gender == "female"] = mean(data$height[data$gender=="female"], na.rm = TRUE)
就像我提到的 && 和 & 有不同的含义。
& 确实是你想要的。height
如果您的两个条件为真或假(是NA 还是gender
女性?),它会测试每一行。例如,结果将是一个向量(对于每一行一个逻辑)TRUE, FALSE, TRUE, FALSE
(第一行和第三行满足条件)。新的平均高度只会用 覆盖行中的高度TRUE
。--> 这就是你想要的。
&& 只会测试第一行。所以你只要得到一个TRUE
或FALSE
。如果您的第一行中包含 NAheight
并且中包含女性,则gender
您会得到一个TRUE
. 并且您的整个数据集将被平均值覆盖(data$height[TRUE] - 表示列高中的所有内容)。如果您的第一行不是女性或身高有值,则结果将为FALSE
. 所以没有高度会被平均高度覆盖。
因此,没有任何效果的原因可能是您的第一行不符合您的条件 - 因此结果是FALSE
. 并用平均值覆盖 data$height[FALSE] 意味着将 NA 替换为任何行中的平均高度。
推荐阅读
- r - 具有计数自变量的连续因变量的回归模型
- c# - 如何绕过 Asp.net 控件验证仅针对按钮单击的少数控件?
- java - 使用 Spring Boot 进行客户端证书身份验证
- php - 如何在php中根据所属组名迭代数据并显示
- r - 当我展开绘图时,为什么我的地图绘图保持相同的大小(而不是相应地调整大小)?
- html - Bootstrap CSS - 在网格容器中的一行上显示文本
- java - 如果一个类包含一个具有 system.out.println(); 的匿名块;
- statistics - 对和方差法的误解
- excel - 如果它们具有相同的参数,vba如何不计算行(或只计算一次)
- python - 如何将输出打印到 csv 文件?