2011-11-17 13 views
16

Diciamo che ho una tabella, T. Supponiamo che T abbia 5 colonne. Capisco come selezionare qualsiasi sottoinsieme consecutivo di colonne e memorizzarle come una nuova tabella. Per questo vorrei utilizzare staffe e due punti a destra di una virgola:Selezione di colonne non consecutive nelle tabelle R

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

Ma come faccio a selezionare le colonne non consecutivi per sottoinsiemi? Diciamo che voglio selezionare la colonna 1 e la colonna 3? Come procedo a fare questo? Un altro tipo di selezione che può decidere di fare, e non sicuro di come, sta selezionando le colonne casuali da T.

+0

possibile duplicato di [Modi di leggere solo selezionare colonne da un file in R? (Un mezzo felice tra 'read.table' e' scan'?)] (Http://stackoverflow.com/questions/2193742/ways-to-read-only-select-columns-from-a-file-into- ra-happy-medium-between-re) –

+2

La denominazione degli oggetti 'T' (o 'F') può finire per causare problemi lungo la linea - è meglio evitarlo. Inoltre ci sono * "tabelle" in R, ma suppongo che tu abbia davvero un frame dati o una matrice. –

risposta

26

Devi semplicemente generare gli indici che desideri. La funzione c consente di concatenare i valori. I valori possono essere sia indici di colonne o nomi di colonne (ma non misti).

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

È inoltre possibile selezionare quale colonna indici di rimuovere specificando un indice negativo:

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

Come implementare qualcosa di simile? 'val <- 6 cols <- c (1, c (val-4: val-1)) df [, cols]' –

3

Se ho capito la tua domanda correttamente, si dovrebbe cercare qualcosa di simile al seguente:

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

Mi piace quanto sia concisa la tua soluzione, mantenendo tutto in un unico comando con la funzione 'c'. Tuttavia, la tua soluzione si colloca su righe non consecutive mentre la domanda sopra chiede come impostare sottoinsiemi su colonne non consecutive, che, per il frame di dati di esempio 'df <- data.frame (matrice (runif (100), 10))' , sarebbe simile a 'df [, c (1,3,4: 5)]' – coip

2

Per le colonne casuali controllare ?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 
Problemi correlati