【发布时间】:2016-07-20 11:14:55
【问题描述】:
我有一个数据集 df,我想删除变量 y 不具有值 a 的所有行。变量y 还包含一些NAs:
df <- data.frame(x=1:3, y=c('a', NA, 'c'))
我可以使用 R 的索引语法来实现这一点,如下所示:
df[df$y!='a',]
x y
2 <NA>
3 c
请注意,这将返回 NA 和值 c - 这是我想要的。
但是,当我使用 subset 或 dplyr::filter 尝试相同的操作时,NA 会被删除:
subset(df, y!='a')
x y
3 c
dplyr::filter(df, y!='a')
x y
3 c
为什么subset 和dplyr::filter 会这样工作?对我来说这似乎不合逻辑 - NA 与 a 不同,那么当我指定除变量 y 等于 a 的行之外的所有行时,为什么要去掉 NA?
除了明确要求NAs返回之外,还有什么方法可以改变这些函数的行为,即
subset(df, y!='a' | is.na(y))
谢谢
【问题讨论】:
-
我认为这是默认选项
-
您确定您的“正确”行为示例
df[df$y!='a',]会返回您所说的返回值吗?因为我得到了不同的东西。如果我们能就返回的内容达成一致,我可以更全面地解释这一点,而不仅仅是说“就是这样”。 -
看看:github.com/hadley/dplyr/issues/812 - Romain 建议您明确地继续
-
@StevenBeaupré 不错的答案。