superponer - varias graficas en r




Extracción de columnas específicas de un marco de datos (6)

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"))
  A B
1 1 3
2 2 4

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 que mi marco de datos es df , y quiero extraer las columnas 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?


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

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
  A B C D E F
1 1 3 5 7 8 9
2 2 4 6 7 8 9
> df[,c(1,2,5)]
  A B E
1 1 3 8
2 2 4 8
> df[,c("A","B","E")]
  A B E
1 1 3 8
2 2 4 8

Por alguna razón solamente

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

trabajó para mi. Todas las sintaxis anteriores dieron como resultado "columnas no definidas seleccionadas".


Puede subconjuntar utilizando un vector de nombres de columna. Prefiero encarecidamente este enfoque a aquellos que tratan los nombres de columna como si fueran nombres de objeto (por ejemplo, subset() ), especialmente cuando se programan en funciones, paquetes o aplicaciones.

# 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")]

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 el %>% pipe como:

select(df1, A, B, E)

[ 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"))
)




dataframe