Extracción de columnas específicas de un dataframe

Tengo un dataframe R con 6 columnas, y quiero crear un nuevo dataframe que solo tenga tres de las columnas.

Asumiendo que mi dataframe es df , y quiero extraer las columnas A , B y E , este es el único comando que puedo entender:

  data.frame(df$A,df$B,df$E) 

¿Hay una forma más compacta de hacer esto?

Usando el paquete dplyr , si su data.frame se llama df1 :

 library(dplyr) df1 %>% select(A, B, E) 

Esto también se puede escribir sin la tubería %>% como:

 select(df1, A, B, E) 

Sí hay.

 # data for reproducible example # (and to avoid confusion from trying to subset `stats::df`) df <- setNames(data.frame(as.list(1:5)), LETTERS[1:5]) # subset df[,c("A","B","E")] 

Este es el rol de la función subset() :

 > dat <- data.frame(A=c(1,2),B=c(3,4),C=c(5,6),D=c(7,7),E=c(8,8),F=c(9,9)) > subset(dat, select=c("A", "B")) AB 1 1 3 2 2 4 

Hay dos opciones obvias: df[,c("A","B","E")] Joshua Ulrich

 df[,c(1,2,5)] 

como en

 > df <- data.frame(A=c(1,2),B=c(3,4),C=c(5,6),D=c(7,7),E=c(8,8),F=c(9,9)) > df ABCDEF 1 1 3 5 7 8 9 2 2 4 6 7 8 9 > df[,c(1,2,5)] ABE 1 1 3 8 2 2 4 8 > df[,c("A","B","E")] ABE 1 1 3 8 2 2 4 8 

También puede usar el paquete sqldf que realiza selecciones en marcos de datos R como:

 df1 <- sqldf("select A, B, E from df") 

Esto da como salida un dataframe df1 con columnas: A, B, E.

Nuevamente usando dplyr, donde df1 es su dataframe original:

 df2 <- subset(df1, select = c(1, 2, 5)) 

Por alguna razón solo

 df[, (names(df) %in% c("A","B","E"))] 

trabajó para mi. Todas las syntax anteriores arrojaron “columnas indefinidas seleccionadas”.

[ y el subconjunto no son sustituibles:

[ devuelve un vector si solo se selecciona una columna.

 df = data.frame(a="a",b="b") identical( df[,c("a")], subset(df,select="a") ) identical( df[,c("a","b")], subset(df,select=c("a","b")) )