为什么在 dplyr 下面的代码中 filter
不返回与基本 R 子集相同的 data.frame?
事实上,它们都没有按预期工作。我想同时删除观察/行b==1 AND c==1
.也就是说,我只想删除第三行。
require(dplyr)
df <- data.frame(a=c(0,0,0,0,1,1,1),
b=c(0,0,1,1,0,0,1),
c=c(1,NA,1,NA,1,NA,NA))
filter(df, !(b==1 & c==1))
df[!(df$b==1 & df$c==1),]
最佳答案
或使用 complete.cases
转换 NA
至 FALSE
在结果逻辑向量中,以便您可以在否定后选择相应的行,这使用了 NA & F = F
的事实:
filter(df, !(b == 1 & c == 1 & complete.cases(df[c('b', 'c')])))
# a b c
# 1 0 0 1
# 2 0 0 NA
# 3 0 1 NA
# 4 1 0 1
# 5 1 0 NA
# 6 1 1 NA
更多逻辑操作
NA
这里涉及到,乍一看有点令人困惑,但它们遵循以下逻辑:NA & F
# [1] FALSE
NA | T
# [1] TRUE
NA & T
# [1] NA
NA | F
# [1] NA
关于r - 由于 NA 的原因,无法对数据帧进行子集化(过滤),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38948196/