varias superponer studio lineas graficos graficas definicion data r dataframe

studio - superponer graficas en r



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

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


Nuevamente utilizando dplyr, donde df1 es su marco de datos original:

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


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


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 cuadro de datos df1 con columnas: 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")) )