在 dplyr 中,改变一个逻辑列,其中一组其他逻辑列中的任何一个为真

In dplyr, mutate a logical column where any of a set of other logical columns are true

我有一个如下所示的数据框:

typ1  typ2  typ3
   T     T     F
   F     F     F
   T     F     F

我想改变第 4 个逻辑列以确定其他三个是否为真,所以 {T, F, T}。

mutate(isAnyType = any(typ1, typ2, typ3)) 似乎在使用整列,而我想使用每行的信息。任何见解表示赞赏。

我们可以使用 reduce| 来检查每一行中是否有任何 TRUE 元素

library(dplyr)
library(purrr)
df1 %>%
   mutate(isAnyType = reduce(., `|`))

或在base R

中使用rowSums
df1$isAnyType <- rowSums(df1) > 0

或者另一种选择是 pmap

df1 %>%
   mutate(isAnyType = pmap_lgl(., ~ any(c(...)))

数据

df1 <- structure(list(typ1 = c(TRUE, FALSE, TRUE), typ2 = c(TRUE, FALSE, 
FALSE), typ3 = c(FALSE, FALSE, FALSE)), class = "data.frame", 
row.names = c(NA, 
-3L))

看来可以在这里找到答案:

我可以只使用 OR 运算符,而不是利用整个数据帧的 any(),这样 mutate(isAnyType = typ1 |typ2 |typ3)) 就可以工作了

如果您利用存储为 T = 1、F = 0 的布尔值,我相信您可以使用 rowSums() 函数逐行评估 T/F 的实例。这是您要找的吗?

输入:

df <- data.frame(typ1 = c(T, F, T),
                 typ2 = c(T,F, F),
                 typ3 = c(F, F, F))
library(dplyr)
df %>% 
  mutate(typ4 = ifelse(rowSums(df) ==0, F, T))

输出:

   typ1  typ2  typ3  typ4
1  TRUE  TRUE FALSE  TRUE
2 FALSE FALSE FALSE FALSE
3  TRUE FALSE FALSE  TRUE