2020-12-08

Cómo combinar múltiples condiciones para filtrar un data frame usando "OR”

Title

Problema

Queremos filtrar un data frame basándonos en múltiples condiciones usando el operador "O". En nuestro ejemplo filtraremos aquellas filas del data frame donde la v1 sea menor que 0.5 o donde v2 sea igual a g.

Data frame original

           v1 v2
1  0.26550866  a
2  0.37212390  b
3  0.57285336  c
4  0.90820779  d
5  0.20168193  e
6  0.89838968  f
7  0.94467527  g
8  0.66079779  h
9  0.62911404  i
10 0.06178627  j

Resultado esperado

          v1 v2
1 0.26550866  a
2 0.37212390  b
3 0.20168193  e
4 0.94467527  g
5 0.06178627  j
set.seed(1)
df <- data.frame(v1 = runif(10), v2 = letters[1:10])

Solución

Hay múltiples opciones:

  • Funciones del paquete base
  • subset(df , v1 < 0.5 | v2 == "g")
    df[which(df$v1 < 0.5 | df$v2 == "g"), ]
    

  • Operatores [ y [[
  • df[df[1] < 0.5 | df[2] == "g", ] 
    df[df[[1]] < 0.5 | df[[2]] == "g", ] 
    df[df["v1"] < 0.5 | df["v2"] == "g", ]
    

    df$name is equivalent to df[["name", exact = FALSE]]

  • dplyr
  • library(dplyr)
    filter(df, v1 < 0.5 | v2 == "g")
    

  • sqldf
  • library(sqldf)
    sqldf('SELECT *
          FROM df 
          WHERE v1 < 0.5 OR v2 = "g")
    

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos