Filter Different texts in R

2

Good afternoon, I have the following data:

NOME  <- c("LEITO 1001", "LEITO 1002", "LEITO 1003", "LEITO 50", "LEITO 60")
VALOR <- c(10, 20, 30, 40, 50)
dados <- data.frame(NOME, VALOR)

I need to filter only the "LEITO 1001" , "LEITO 1002" and "LEITO 1003" . I would like the help how to proceed. Is there any alternative using the for function? Thank you.

    
asked by anonymous 27.12.2017 / 18:14

2 answers

4

The logical operator %in% is very useful in these situations to avoid writing various comparisons with | (or). Example using dplyr :

library(dplyr)
dados <- dados %>%
  filter(NOME %in% paste("LEITO", c(1001:1003)))


dados

        NOME VALOR
1 LEITO 1001    10
2 LEITO 1002    20
3 LEITO 1003    30
    
27.12.2017 / 19:34
3

Some logical arguments of the R language to filter data are important to know:

!x = > not x

x | y = > x OU y

x & y = > x E y

isTRUE(x) = > test if X is TRUE

Filtering data with multiple conditions can be done in different ways:

dados
        NOME VALOR
1 LEITO 1001    10
2 LEITO 1002    20
3 LEITO 1003    30
4 LEITO   50    40
5 LEITO   60    50

using which() :

dados[which(dados$NOME == "LEITO 1001" | dados$NOME == "LEITO 1002" | dados$NOME == "LEITO 1003"),]

Using the subset() function:

subset(dados, NOME == "LEITO 1001" | NOME == "LEITO 1002" | NOME == "LEITO 1003")

Using dplyr :

library(dplyr)
filter(dados, NOME == "LEITO 1001" | NOME == "LEITO 1002" | NOME == "LEITO 1003")

Using sqldf :

library(sqldf)
sqldf('SELECT *
      FROM dados 
      WHERE NOME == "LEITO 1001" OR NOME == "LEITO 1002" OR NOME == "LEITO 1003"')

Result:

        NOME VALOR
1 LEITO 1001    10
2 LEITO 1002    20
3 LEITO 1003    30
    
27.12.2017 / 19:19