Filter Different Texts in R

Asked

Viewed 530 times

3

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 Beds "LEITO 1001", "LEITO 1002" and "LEITO 1003". I would like help how to proceed. Is there any alternative using the function for? Thank you.

2 answers

5


The logical operator %in% is very useful in these situations to avoid you write several 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
  • Good morning. Unfortunately it did not work, since my example was not the best.

  • I will open a new question.

4

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

!x => nonx

x | y => x or y

x & y => x E y

isTRUE(x) => test if X is true

Filtering data with multiple conditions can be performed 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 function subset():

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"')

Upshot:

        NOME VALOR
1 LEITO 1001    10
2 LEITO 1002    20
3 LEITO 1003    30

Browser other questions tagged

You are not signed in. Login or sign up in order to post.