0

我使用以下代码从数据库中删除了某些行:

df2 <- df1[!(df1$variable==1), ]

这是一个虚拟变量,并且该特定虚拟变量的值为 1 的行已成功删除。(我在前后使用“dim”函数检查了数据库的尺寸;一切看起来都很正常。)

然而,在我这次使用新数据集“df2”运行回归模型后,我看到自由度急剧下降!这远远超过了删除的行数!

我想知道这怎么会发生。然后,我意识到新数据集有许多只有 NA 的行。在随机变量有缺失值的每一行,R 都有一整行的 NA 值。

在意识到上面的代码不是删除行的最佳方法后,我尝试了以下方法:

df2 <- df1[(df1$variable==0 | is.na(df1$variable)), ]

它似乎奏效了,因为我不再有同样的问题。但是你会说上面的这个新代码可能有一些我现在还没有真正意识到的(类似或其他)问题吗?

4

1 回答 1

1

新代码应该没问题。旧代码的问题是由NAs indf1$variable==比较运算符的组合引起的。

如果您阅读比较运算符的帮助?"==",您会看到,“缺失值 (NA) 和 NaN 值被认为与它们自身不可比较,因此涉及它们的比较将始终导致 NA。

在您的情况下,每当 df1$variable 为 时NA,您尝试的子集的结果为NA(非TRUEFALSE),这导致该行中的其他变量为NA。例如:

df1 <- expand.grid(variable=c(0, 1, NA), var2=c(0, 1, NA))

sel1 <- !(df1$variable==1)
sel1
df1[sel1, ]

sel2 <- df1$variable==0 | is.na(df1$variable)
sel2
df1[sel2, ]
于 2013-06-18T14:58:04.020 回答