filtros - seleccionar columnas en r
dplyr: seleccione nombres de columnas que contengan espacios en blanco (2)
df <- structure(list(`a a` = 1:3, `a b` = 2:4), .Names = c("a a", "a b"
), row.names = c(NA, -3L), class = "data.frame")
y los datos se ven como
a a a b
1 1 2
2 2 3
3 3 4
Siguiente llamada para seleccionar
select(df, ''a a'')
da
Error in abs(ind[ind < 0]) :
non-numeric argument to mathematical function
¿Cómo puedo seleccionar "aa" y / o cambiarle el nombre a algo sin espacio usando select
? Sé los siguientes enfoques:
-
names(df)[1] <- "a"
-
select(df, a=1)
-
select(df, ends_with("a"))
pero si estoy trabajando en un gran conjunto de datos, ¿cómo puedo obtener una coincidencia exacta sin conocer el número de índice o nombres de columna similares?
Algunas alternativas a los backticks, bueno como dplyr 0.5.0, la versión actual a partir de este escrito.
Si está intentando seleccionar mediante programación un argumento como una columna y no desea cambiar el nombre ni hacer algo como paste
/ hacer sprintf
el nombre de la columna en backticks, puede usar as.name
junto con la versión de evaluación no estándar de select
, que es select_
:
dplyr::select_(df, as.name("a a"))
Muchas de las funciones dplyr
tienen versiones no estándar. En el caso de select
específicamente, también puede usar la versión estándar junto con el asistente de selección one_of
. Ver ?dplyr::select_helpers
para la documentación:
dplyr::select(df, dplyr::one_of("a a"))
Usted puede select
la variable usando backticks `
.
select(df, `a a`)
# a a
# 1 1
# 2 2
# 3 3
Sin embargo, si su objetivo principal es cambiar el nombre de la columna, puede usar rename
en el paquete plyr
, en el que puede usar tanto ""
como ``
.
rename(df, replace = c("a a" = "a"))
rename(df, replace = c(`a a` = "a"))
O en la base
R:
names(df)[names(df) == "a a"] <- "a"
Para una descripción más completa sobre el uso de varias citas, vea ?Quotes
. La sección ''Nombres e identificadores'' es especialmente relevante aquí:
se pueden usar otros nombres [sintácticamente inválidos] siempre que estén entre comillas. La cita preferida es el backtick ".
Ver también ?make.names
sobre nombres válidos.
Ver también esta publicación sobre el cambio de nombre en dplyr