2014-05-15 19 views
5

W jednym kawałku mojego kodu, muszę wybrać pewne kolumny mojej macierzy na podstawie macierzy binarnej, którą posiadam, i zapisać ją na liście, ale napotykam następujący problem. Czy ktoś wie, na czym polega problem? Oto moja matryca i kod:Wybieranie kolumn macierzy na podstawie wektora binarnego

> data 
     A B C D 
    [1,] 1 6 11 16 
    [2,] 2 7 12 17 
    [3,] 3 8 13 18 
    [4,] 4 9 14 19 
    [5,] 5 10 15 20 

    > select<-c(1,0,1,0) 

> p<-data[,select, drop=FALSE] 
> p 
    A A 
[1,] 1 1 
[2,] 2 2 
[3,] 3 3 
[4,] 4 4 
[5,] 5 5 

Moja oczekiwana produkcja jest:

> p 
    A C 
[1,] 1 11 
[2,] 2 12 
[3,] 3 13 
[4,] 4 14 
[5,] 5 15 

Odpowiedz

4

Musisz przekonwertować go do logicznego wektorze albo będzie ono traktować 1 i 0 jako liczby kolumn:

data[,as.logical(select), drop=F] 
# A C 
# 1 1 11 
# 2 2 12 
# 3 3 13 
# 4 4 14 
# 5 5 15 
+0

Jak zachować nazwę kolumny? – user2806363

+1

@ user2806363 Czy próbowałeś tego na własnych danych? Ponieważ nie utworzyłeś łatwego sposobu na skopiowanie/wklejenie twoich danych do R, josilber prawdopodobnie nie dodał kolumn do swoich danych testowych. Ta metoda zachowa nazwy. – MrFlick

+0

@ user2806363 Zaktualizowałem 'data', aby mieć nazwy kolumn - ta metoda składowania zachowuje nazwy kolumn. – josliber

3

Możesz także spróbować. Po prostu dostarczając select mówisz, aby wybrać kolumny według numeru kolumny. Kiedy dostarczasz select==1, najpierw otrzymujesz wektor logiczny i używasz go do wybrania kolumn.

data <- matrix(1:20, nrow = 5, dimnames = list(NULL, c("A", "B", "C", "D"))) 
select <- c(1, 0, 1, 0) 
data[, select == 1] 
##  A C 
## [1,] 1 11 
## [2,] 2 12 
## [3,] 3 13 
## [4,] 4 14 
## [5,] 5 15 
Powiązane problemy