在 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
我有一个如下所示的数据框:
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