r - 当存在 NA 时,将 dplyr 过滤器转换为基础 R

标签 r dplyr

我在 dplyr 中有一个有效的 filter 语句,但无法转换为基础 R

library(dplyr)
x <- data.frame(
    v1 = c("USA", "Canada", "Mexico"),
    v2 = c(NA, 1:5)
  )

x %>% filter(v1=="Canada",v2 %in% 3:5)

x[x$v1=="Canada" && x$v2 %in% 3:5,]

如有任何帮助,我们将不胜感激。

最佳答案

举例说明:

library(dplyr)
x <- data.frame(
   v1 = c("USA", "Canada", "Mexico"),
   v2 = c(NA, 1:5)
)

# filter 
x %>% filter(v1=="Canada",v2 %in% 3:5)
      v1 v2
1 Canada  4

# your approach
x[x$v1=="Canada" && x$v2 %in% 3:5,]
 v1 v2
<0 rows> (or 0-length row.names)

# second & removed
x[x$v1=="Canada" & x$v2 %in% 3:5,]
      v1 v2
5 Canada  4

除了行名之外,它给出相同的结果。

查看此示例以了解之前发生的情况(取自 here )

-2:2 >= 0
[1] FALSE FALSE  TRUE  TRUE  TRUE
-2:2 >= 0 & -2:2 <= 0
[1] FALSE FALSE  TRUE FALSE FALSE
-2:2 >= 0 && -2:2 <= 0
[1] FALSE

在某些情况下,您可能会遇到 NA 问题。那么建议将逻辑语句包装到 which 中。默认情况下,filter 会过滤掉 NA。例如

# will include NA:
x[x$v2 > 3,]
       v1 v2
NA   <NA> NA
5  Canada  4
6  Mexico  5

# will exclude NA 
x[which(x$v2 > 3),]
      v1 v2
5 Canada  4
6 Mexico  5

关于r - 当存在 NA 时,将 dplyr 过滤器转换为基础 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37551647/

相关文章:

r - 如何加速R for循环?

R:在多列的彼此范围内查找数据框中的行

r - dplyr 使用 t.test 汇总多个列

使用 dplyr 计算多列的行中位数

r - 等待用户从终端输入 R

用 "1"替换下一个值

r - 按时间顺序匹配和相减

r - 根据列号选择值

r - dplyr::lead 或 data.table::shift 引用变量值而不是标量

用特定变量名替换列中的 NA