首页 > 解决方案 > 如何替换 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

我不知道还能去哪里。任何帮助是极大的赞赏。

标签: r

解决方案


你的代码有两个问题。第一个在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。--> 这就是你想要的。

&& 只会测试第一行。所以你只要得到一个TRUEFALSE。如果您的第一行中包含 NAheight并且中包含女性,则gender您会得到一个TRUE. 并且您的整个数据集将被平均值覆盖(data$height[TRUE] - 表示列高中的所有内容)。如果您的第一行不是女性或身高有值,则结果将为FALSE. 所以没有高度会被平均高度覆盖。

因此,没有任何效果的原因可能是您的第一行不符合您的条件 - 因此结果是FALSE. 并用平均值覆盖 data$height[FALSE] 意味着将 NA 替换为任何行中的平均高度。


推荐阅读