2011-11-17 9 views
16

Załóżmy, że mam tabelę, T. Załóżmy, że T ma 5 kolumn. Rozumiem, jak wybrać dowolny z kolejnych podzbiorów kolumn i zapisać je jako nową tabelę. Do tego chciałbym użyć wsporników i dwukropek na prawo od przecinka:Wybieranie kolumn nie będących kolejnymi w tabelach R

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

ale jak mam wybrać non-kolejne kolumny dla podzbioru? Powiedzmy, że chcę wybrać Kolumnę 1 i Kolumnę 3? Jak mam to zrobić? Innym rodzajem selekcji może chcę zrobić, i nie wiem, jak jest wybierając losowe kolumny z T.

+0

możliwy duplikat [Sposobów, aby przeczytać tylko wybrać kolumny z pliku na R? (Szczęśliwy środek między "read.table" i "scan"?)] (Http://stackoverflow.com/questions/2193742/ways-to-read-only-select-columns- from-a-file-into- ra-happy-medium-between-re) –

+2

Nazewnictwo obiektów "T" (lub "F") może skończyć się powodując problemy na linii - lepiej go unikać. Także tam * są * "tabele" w R, ale domyślam się, że naprawdę masz ramkę danych lub macierz. –

Odpowiedz

26

Najpierw wygeneruj indeksy, które chcesz. Funkcja c pozwala na łączenie wartości. Wartości mogą być indeksami kolumn lub nazwami kolumn (ale nie mogą być zmieszane).

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

Można również wybrać, które kolumny indeksy do usunąć podając ujemny indeks:

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

Jak zaimplementować coś takiego? 'val <- 6 cols <- c (1, c (val-4: val-1)) df [, cols]' –

3

Jeśli dobrze rozumiem pytanie, należy spróbować coś podobnego do następującego:

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

Bardzo podoba mi się, jak zwięzłe jest twoje rozwiązanie, zachowując je wszystkie za pomocą jednego polecenia z funkcją 'c'. Jednak twoje rozwiązanie dzieli się na wiersze, które nie sąsiadują z kolejnością, podczas gdy powyższe pytanie pyta, jak dokonać podziału w kolumnach, które nie sąsiadują z kolejnością, co dla przykładowej ramki danych 'df <- data.frame (matrix (runif (100), 10)) , wyglądałby tak: 'df [, c (1,3,4: 5)]' – coip

2

losowych kolumn sprawdzeniu ?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 
Powiązane problemy