2016-05-28

Filtrar filas de un data frame en función de múltiples condiciones en R

Title

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

  • Datos originales
  • 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

  • Paquete base
  • df[apply(df, 1, function(x) {any(x == 123| x == 321)}),]
    
  • Paquete dplyr
  • 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

    Nube de datos