regex - regular - str_detect r
Seleccionar columnas segĂșn la coincidencia de cadena-dplyr:: select (4)
Basado en la respuesta de Piotr Migdals, quiero dar una solución alternativa que permita la posibilidad de un vector de cadenas:
myVectorOfStrings <- c("foo", "bar")
matchExpression <- paste(myVectorOfStrings, collapse = "|")
# [1] "foo|bar"
df %>% select(matches(matchExpression))
Haciendo uso del operador regex
OR
(
|
)
Tengo un marco de datos ("datos") con montones y montones de columnas. Algunas de las columnas contienen una determinada cadena ("search_string").
¿Cómo puedo usar
dplyr::select()
para darme un subconjunto que incluya solo las columnas que contienen la cadena?
Lo intenté:
# columns as boolean vector
select(data, grepl("search_string",colnames(data)))
# columns as vector of column names names
select(data, colnames(data)[grepl("search_string",colnames(data))])
Ninguno de los dos trabaja.
Sé que
select()
acepta vectores numéricos como sustitutos de columnas, por ejemplo:
select(data,5,7,9:20)
Pero no sé cómo obtener un vector numérico de
ID
de columnas de mi expresión
grepl()
.
Dentro del mundo dplyr , intente:
select(iris,contains("Sepal"))
Vea la sección Selección en
?select
starts_with
para muchos otros ayudantes como
starts_with
,
ends_with
, etc.
No es necesario usar
select
solo use
[
lugar
data[,grepl("search_string", colnames(data))]
Probemos con el conjunto de datos de
iris
>iris[,grepl("Sepal", colnames(iris))]
Sepal.Length Sepal.Width
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
Puedes probar:
select(data, matches("search_string"))
Es más general que
contains
: puede usar regex (por ejemplo,
"one_string|or_the_other"
).
Para obtener más ejemplos, consulte: http://rpackages.ianhowson.com/cran/dplyr/man/select.html .