Tengo un marco de datos R con 6 columnas, y quiero crear un nuevo marco de datos que solo tenga tres de las columnas.
Suponiendo mi trama de datos es df
, y quiero columnas de extracto A
, B
y E
, este es el único comando que puedo averiguar:
data.frame(df$A,df$B,df$E)
¿Hay una forma más compacta de hacer esto?
df1 %>% select(A, B, E) %>% rowMeans(.)
. Consulte la documentación de la%>%
tubería escribiendo?magrittr::`%>%`
Puede subconjunto usando un vector de nombres de columna. Prefiero este enfoque sobre aquellos que tratan los nombres de columna como si fueran nombres de objetos (por ejemplo
subset()
), especialmente cuando se programa en funciones, paquetes o aplicaciones.fuente
object of type 'closure' is not subsettable
.df
.df
También es una función en el paquete de estadísticas.-"A"
es un error de sintaxis. Y?Extract
dice, " , también pueden ser números enteros negativos, lo que indica elementos / rebanadas de dejar fuera de la selección."i
j
...
> df[,c("A")]
[1] 1
. Usarsubset
no tiene esta desventaja.Este es el papel de la
subset()
función:fuente
c("A", "B")
es un vector, no una lista.Hay dos opciones obvias: Joshua Ulrich's
df[,c("A","B","E")]
ocomo en
fuente
Solo por alguna razón
trabajó para mi. Todas las sintaxis anteriores produjeron "columnas indefinidas seleccionadas".
fuente
Donde df1 es su marco de datos original:
fuente
dplyr
. Utilizabase::subset
, y es idéntico a la respuesta de Stephane Laurent, excepto que utiliza números de columna en lugar de nombres de columna.También puede usar el
sqldf
paquete que realiza selecciones en marcos de datos R como:Esto da como resultado un marco de datos
df1
con columnas: A, B, E.fuente
Puedes usar
with
:fuente
Además, puede asignar un nombre diferente a los datos recién creados
fuente
[
y subconjunto no son sustituibles:[
devuelve un vector si solo se selecciona una columna.fuente
drop=FALSE
. Ejemplo:df[,c("a"),drop=F]