Dplyr - 过滤任何变量是否等于某个值

Gas*_*re 6 r dplyr

我有一个a包含5个变量的数据集,并希望像这样过滤它:

a1 <- a %>% filter(var_1 != 1 , var_2 != 1 , var_3 != 1 , var_4 != 1 , variable_5 != 1)
Run Code Online (Sandbox Code Playgroud)

我想知道是否存在这样的(伪代码):

a1 <- a %>% filter(anyvariable != 1)
Run Code Online (Sandbox Code Playgroud)

换句话说,我想摆脱价值为1的所有行,无论它出现在哪里.1只是一个随机数.它可能是9,99,或其他任何东西!谢谢!

akr*_*run 5

我们也许可以使用 rowSums

a %>% 
  filter(rowSums(. !=0) >0)
#    Col1 Col2
#1    1    1
#2    0   24
#3    9    1
Run Code Online (Sandbox Code Playgroud)

如果我改成它 !=1

a %>% 
   filter(rowSums(. != 1) > 0)
#   Col1 Col2
#1    0   24
#2    9    1
#3    0    0
Run Code Online (Sandbox Code Playgroud)

请注意,这将删除所有1的行.在前一种情况下,它删除所有0的行,这与OP中提到的OP一致.

更新

如果OP想要删除任何1的行(只是一个数字,他可以使用9,或99,或999)

a %>% 
   filter(!rowSums(.==1))
#    Col1 Col2
#1    0   24
#2    0    0
Run Code Online (Sandbox Code Playgroud)

数据

a <- data.frame(Col1 = c(1, 0, 9, 0), Col2 = c(1, 24, 1, 0))
Run Code Online (Sandbox Code Playgroud)


Geo*_*ood 5

可以filter_allall_varsfrom 结合使用dplyr,如下所示:

some_data <- tibble(var1 = c("a", "b", "c"),
                    var2 = c(2, 4, 1),
                    var3 = c(1, 6, 5))

# # A tibble: 3 x 3
#   var1   var2  var3
#   <chr> <dbl> <dbl>
# 1 a      2.00  1.00
# 2 b      4.00  6.00
# 3 c      1.00  5.00

some_data %>% filter_all(all_vars(. != 1))

# # A tibble: 1 x 3
#   var1   var2  var3
#   <chr> <dbl> <dbl>
# 1 b      4.00  6.00
Run Code Online (Sandbox Code Playgroud)

这将删除其中变量包含1的行。在上面的示例中,这将删除第一行和第三行。但是,请谨慎使用NA值:

some_data <- tibble(var1 = c("a", "b", "c"),
                    var2 = c(2, NA, 1),
                    var3 = c(1, 6, 5))
# # A tibble: 3 x 3
#   var1   var2  var3
#   <chr> <dbl> <dbl>
# 1 a      2.00  1.00
# 2 b     NA     6.00
# 3 c      1.00  5.00

some_data %>% filter_all(all_vars(. != 1))  

# # A tibble: 0 x 3
# # ... with 3 variables: var1 <chr>, var2 <dbl>, var3 <dbl>
Run Code Online (Sandbox Code Playgroud)

请注意,第二行不包含1,但是无论如何都会被过滤。在此特定示例中,您可以通过以下方式避免此类行为:

some_data %>% filter_all(all_vars(. != 1 | is.na(.)))
Run Code Online (Sandbox Code Playgroud)

但是,这可能无法很好地概括。