我有一个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,或其他任何东西!谢谢!
我们也许可以使用 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)
可以filter_all与all_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)
但是,这可能无法很好地概括。
| 归档时间: |
|
| 查看次数: |
6435 次 |
| 最近记录: |