Tengo un marco de datos que se ve así:
typ1 typ2 typ3
T T F
F F F
T F F
Y quiero mutar una cuarta columna lógica que determine si alguno de los otros tres es VERDADERO, entonces {T, F, T}.
mutate(isAnyType = any(typ1, typ2, typ3))
parece estar usando las columnas completas, cuando me gustaría usar la información por fila. Cualquier idea es apreciada.
3 respuestas
Podemos usar reduce
con |
para verificar si hay elementos VERDADEROS en cada fila
library(dplyr)
library(purrr)
df1 %>%
mutate(isAnyType = reduce(., `|`))
O usando rowSums
en base R
df1$isAnyType <- rowSums(df1) > 0
O otra opción es pmap
df1 %>%
mutate(isAnyType = pmap_lgl(., ~ any(c(...)))
Datos
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))
Parece que la respuesta se puede encontrar aquí: Uso de any () vs | en dplyr :: mutate
En lugar de cualquier (), que utiliza el marco de datos completo, puedo usar el operador OR, para que mutate(isAnyType = typ1 |typ2 |typ3))
funcione
Si aprovecha los valores booleanos que se almacenan como T = 1, F = 0, creo que podría usar la función rowSums () para evaluar las instancias de T / F en fila. ¿Es esto lo que estás buscando?
Entrada:
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))
Salida:
typ1 typ2 typ3 typ4
1 TRUE TRUE FALSE TRUE
2 FALSE FALSE FALSE FALSE
3 TRUE FALSE FALSE TRUE
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
r
R es un entorno de software y lenguaje de programación de código abierto y gratuito para computación estadística, bioinformática, visualización y computación en general. Proporcione ejemplos mínimos y reproducibles junto con el resultado deseado. Use dput () para los datos y especifique todos los paquetes no base con llamadas a library (). No incruste imágenes para datos o código, use bloques de código con sangría en su lugar. Para preguntas relacionadas con estadísticas, use https://stats.stackexchange.com.