Problema
Queremos filtrar el siguiente data frame, conservando aquellas filas que contengan el valor 123 o 321.
Index odx1 odx2 odx3 odx4 odx5
1 1 123 0 0 0 0
2 2 0 321 0 0 0
3 3 0 0 0 123 0
4 4 0 321 0 0 0
5 5 0 0 0 0 0
df <- structure(list(Index = 1:5, odx1 = c(123L, 0L, 0L, 0L, 0L), odx2 = c(0L,
321L, 0L, 321L, 0L), odx3 = c(0L, 0L, 0L, 0L, 0L), odx4 = c(0L,
0L, 123L, 0L, 0L), odx5 = c(0L, 0L, 0L, 0L, 0L)), .Names = c("Index",
"odx1", "odx2", "odx3", "odx4", "odx5"), class = "data.frame", row.names = c(NA,
-5L))
Solución
df[apply(df, 1, function(x) {any(x == 123| x == 321)}),]
library(dplyr)
filter(df, rowSums(mutate_each(df, funs(. %in% c(123, 321)))) >= 1L)
Con mutate creamos una matriz de valores lógicos que evaluamos con rowSums.
mutate_each(df, funs(. %in% c(123, 321)))
Index odx1 odx2 odx3 odx4 odx5
1 1 123 0 0 0 0
2 2 0 321 0 0 0
3 3 0 0 0 123 0
4 4 0 321 0 0 0
Referencias
No hay comentarios:
Publicar un comentario