使用 pmap 函数检查一行中的所有值是正数还是负数
Using pmap function to check whether all values in a row are positive or negative
我有这个数据框,我想单独使用 pmap
函数来过滤所有值为负或正的行。当我想到 c(...)
时,我正在寻找一种简洁的方法来执行此操作,但我们只能在函数内部使用它。
可以通过这段代码实现:
df <- tibble(x = c("a", "b", "c"), y = c(1, -1, -1), z = c(1, -1, 1),
p = c(1, -1, -1))
df %>%
filter(pmap_lgl(list(y, z, p), ~ ..1 > 0 & ..2 > 0 & ..3 > 0 |
..1 < 0 & ..2 < 0 & ..3 < 0))
# A tibble: 2 x 4
x y z p
<chr> <dbl> <dbl> <dbl>
1 a 1 1 1
2 b -1 -1 -1
所以我正在寻找一种方法,使谓词适用于所有值,以防我有 3 个以上的列,而我不想这样命名或引用它们。
非常感谢任何帮助,并提前致谢。
我们可以使用if_all
library(dplyr)
df %>%
filter(across(where(is.numeric), ~ . > 0)|
if_all(where(is.numeric), ~ . < 0))
-输出
# A tibble: 2 x 4
# x y z p
# <chr> <dbl> <dbl> <dbl>
#1 a 1 1 1
#2 b -1 -1 -1
或通过 select
对 numeric
列使用 pmap
,检查 all
值是否小于 0 或 |
大于 0
library(purrr)
df %>%
filter(pmap_lgl(select(., where(is.numeric)),
~ all(c(...) < 0)| all(c(...)> 0)))
-输出
# A tibble: 2 x 4
# x y z p
# <chr> <dbl> <dbl> <dbl>
#1 a 1 1 1
#2 b -1 -1 -1
我有这个数据框,我想单独使用 pmap
函数来过滤所有值为负或正的行。当我想到 c(...)
时,我正在寻找一种简洁的方法来执行此操作,但我们只能在函数内部使用它。
可以通过这段代码实现:
df <- tibble(x = c("a", "b", "c"), y = c(1, -1, -1), z = c(1, -1, 1),
p = c(1, -1, -1))
df %>%
filter(pmap_lgl(list(y, z, p), ~ ..1 > 0 & ..2 > 0 & ..3 > 0 |
..1 < 0 & ..2 < 0 & ..3 < 0))
# A tibble: 2 x 4
x y z p
<chr> <dbl> <dbl> <dbl>
1 a 1 1 1
2 b -1 -1 -1
所以我正在寻找一种方法,使谓词适用于所有值,以防我有 3 个以上的列,而我不想这样命名或引用它们。
非常感谢任何帮助,并提前致谢。
我们可以使用if_all
library(dplyr)
df %>%
filter(across(where(is.numeric), ~ . > 0)|
if_all(where(is.numeric), ~ . < 0))
-输出
# A tibble: 2 x 4
# x y z p
# <chr> <dbl> <dbl> <dbl>
#1 a 1 1 1
#2 b -1 -1 -1
或通过 select
对 numeric
列使用 pmap
,检查 all
值是否小于 0 或 |
大于 0
library(purrr)
df %>%
filter(pmap_lgl(select(., where(is.numeric)),
~ all(c(...) < 0)| all(c(...)> 0)))
-输出
# A tibble: 2 x 4
# x y z p
# <chr> <dbl> <dbl> <dbl>
#1 a 1 1 1
#2 b -1 -1 -1