r-使用pmap函数检查一行中的所有值是正数还是负数

  • 本文关键字:一行 函数 pmap 使用 r purrr
  • 更新时间 :
  • 英文 :


我有这个数据帧,我想只使用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

或者通过selectnumeric列进行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

最新更新