usar seleccionar paquete instalar funcion filtrar filas datos data como agrupar r dplyr string-matching multiple-conditions

seleccionar - instalar paquete dplyr en r



Filtrar mĂșltiples valores en una columna de cadena en dplyr (3)

Esto se puede lograr utilizando el paquete dplyr, que está disponible en CRAN. La forma simple de lograr esto:

  1. Instalar el paquete dplyr .

  2. library(dplyr) df<- select(filter(dat,name==''tom''| name==''Lynn'',c(''days'',''name))

Explicación:

Entonces, una vez que hemos descargado dplyr, creamos un nuevo marco de datos usando dos funciones diferentes de este paquete:

filtro: el primer argumento es el marco de datos; El segundo argumento es la condición por la cual queremos subconjunto. El resultado es el marco de datos completo con solo las filas que queríamos. select: el primer argumento es el marco de datos; El segundo argumento son los nombres de las columnas que queremos seleccionar. No tenemos que usar la función de nombres (), y ni siquiera tenemos que usar comillas. Simplemente enumeramos los nombres de las columnas como objetos.

Tengo un data.frame con datos de caracteres en una de las columnas. Me gustaría filtrar varias opciones en data.frame desde la misma columna. ¿Hay una manera fácil de hacer esto que me estoy perdiendo?

Ejemplo: data.frame name = dat

days name 88 Lynn 11 Tom 2 Chris 5 Lisa 22 Kyla 1 Tom 222 Lynn 2 Lynn

Me gustaría filtrar a Tom y Lynn por ejemplo.
Cuando lo hago:

target <- c("Tom", "Lynn") filt <- filter(dat, name == target)

Me sale este error:

longer object length is not a multiple of shorter object length


Necesita %in% lugar de == :

library(dplyr) target <- c("Tom", "Lynn") filter(dat, name %in% target) # equivalently, dat %>% filter(name %in% target)

Produce

days name 1 88 Lynn 2 11 Tom 3 1 Tom 4 222 Lynn 5 2 Lynn

Para entender por qué, considere lo que sucede aquí:

dat$name == target # [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE

Básicamente, estamos reciclando el vector target dos longitudes cuatro veces para que coincida con la longitud de dat$name . En otras palabras, estamos haciendo:

Lynn == Tom Tom == Lynn Chris == Tom Lisa == Lynn ... continue repeating Tom and Lynn until end of data frame

En este caso no recibimos un error porque sospecho que su marco de datos en realidad tiene un número diferente de filas que no permiten el reciclaje, pero la muestra que proporciona sí (8 filas). Si la muestra hubiera tenido un número impar de filas, habría obtenido el mismo error que usted. Pero incluso cuando el reciclaje funciona, esto claramente no es lo que quieres. Básicamente, la declaración dat$name == target es equivalente a decir:

devuelve TRUE por cada valor impar que sea igual a "Tom" o por cada valor par que sea igual a "Lynn".

Sucede que el último valor en su marco de datos de muestra es par e igual a "Lynn", de ahí el TRUE anterior.

En contraste, dat$name %in% target dice:

para cada valor en dat$name , verifique que exista en target .

Muy diferente. Aquí está el resultado:

[1] TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE

Tenga en cuenta que su problema no tiene nada que ver con dplyr , solo el mal uso de == .


Usando el paquete base :

df <- data.frame(days = c(88, 11, 2, 5, 22, 1, 222, 2), name = c("Lynn", "Tom", "Chris", "Lisa", "Kyla", "Tom", "Lynn", "Lynn")) # Three lines target <- c("Tom", "Lynn") index <- df$name %in% target df[index, ] # One line df[df$name %in% c("Tom", "Lynn"), ]

Salida:

days name 1 88 Lynn 2 11 Tom 6 1 Tom 7 222 Lynn 8 2 Lynn

Usando sqldf :

library(sqldf) # Two alternatives: sqldf(''SELECT * FROM df WHERE name = "Tom" OR name = "Lynn"'') sqldf(''SELECT * FROM df WHERE name IN ("Tom", "Lynn")'')