r - 使用 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

或与 pmap来自 select正在numeric列,检查是否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

关于r - 使用 pmap 函数检查一行中的所有值是正数还是负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67037099/

相关文章:

r - 如何映射嵌套数据框并将多列存储为输出

r - 在 ggplot (R) 中分离 geom_point 和 geom_path 绘图层

r - 将列表列转换为字符串列

r - 使用 dplyr 跨列进行条件求和

根据条件返回列名

r - 使用 purrr 更改 r 中的许多列类型

r - 使用 R igraph 和 dplyr (purrr) 在列表柱图中有条件地设置边属性

r - 有没有办法从 tar.gz 中读取一个 CSV 数据集,其中包含 R 语言中的许多数据集?

r - 将 mutate_at 与 mutate_if 一起使用

r - 在R中排列日期字符