2011-11-17 363 views
16

Digamos que tengo una tabla, T. Suponer que T tiene 5 columnas. Entiendo cómo seleccionar cualquier subconjunto de columnas consecutivas y almacenarlas como una nueva tabla. Para que me gustaría utilizar soportes y dos puntos a la derecha de la coma:Seleccionar columnas no consecutivas en las tablas R

newT <- T[,2:4] # creates newT from columns 2 through 4 in T 

Pero ¿Cómo seleccionar columnas no consecutivos para subsetting? Digamos que quiero seleccionar Columna 1 y Columna 3? ¿Cómo voy a hacer esto? Otro tipo de selección que puede querer hacer, y sin saber cómo, se selecciona al azar columnas de T.

+0

posible duplicado de [maneras de leer solo seleccionar columnas de un archivo en R? (Un medio feliz entre 'read.table' y' scan'?)] (Http://stackoverflow.com/questions/2193742/ways-to-read-only-select-columns-from-a-file-into- ra-happy-medium-between-re) –

+2

Nombrar objetos 'T' (o 'F') puede terminar causando problemas en la línea - es mejor evitarlo. También hay * "tablas" en R, pero supongo que realmente tienes un marco de datos o una matriz. –

Respuesta

26

Simplemente primero genere los índices que desea. La función c le permite concatenar valores. Los valores pueden ser índices de columnas o nombres de columnas (pero no mixtos).

df <- data.frame(matrix(runif(100), 10)) 
cols <- c(1, 4:8, 10) 
df[,cols] 

También puede seleccionar que los índices de la columna a eliminar especificando un índice negativo:

df[, -c(3, 5)] # all but the third and fifth columns 
+0

¿Cómo implementar algo como esto? 'val <- 6 cols <- c (1, c (val-4: val-1)) df [, cols]' –

3

Si entiendo bien su pregunta, usted debe intentar algo similar a lo siguiente:

df1 = data.frame(state=c("KS","CO","CA","FL","CA"), value=c(1,2,3,7,9)) 
df1 

df1[c(c(1,3),4:5),] 
df1[c(1,3,4:5),] 
+0

Me gusta mucho lo conciso que es tu solución, manteniéndolo todo en un solo comando con la función 'c'. Sin embargo, sus subconjuntos de soluciones en filas no consecutivas, mientras que la pregunta anterior pregunta cómo subconjuntar en columnas no consecutivas, que, para el marco de datos de muestra 'df <- data.frame (matrix (runif (100), 10))' , se vería así 'df [, c (1,3,4: 5)]' – coip

2

Para las columnas al azar echa un vistazo a ?sample

df <- data.frame(matrix(runif(25), 5)) 
df 
#   X1  X2   X3   X4  X5 
#1 0.7973941 0.6142358 0.07211461 0.01478683 0.6623704 
#2 0.8992845 0.8347466 0.54495115 0.52242817 0.4944838 
#3 0.8695551 0.9228987 0.00838420 0.58049324 0.9256282 
#4 0.1559048 0.7116077 0.08964883 0.06799828 0.3752833 
#5 0.2179599 0.4533054 0.60817319 0.62235228 0.8357441 

df[ ,sample(names(df), 3)] 
#   X5   X3  X2 
#1 0.6623704 0.07211461 0.6142358 
#2 0.4944838 0.54495115 0.8347466 
#3 0.9256282 0.00838420 0.9228987 
#4 0.3752833 0.08964883 0.7116077 
#5 0.8357441 0.60817319 0.4533054 
Cuestiones relacionadas