2014-05-15 13 views
5

In einem Stück meines Codes, muss ich bestimmte Spalten meiner Matrix basierend auf binären Matrix, die ich habe, auswählen, und speichern Sie es in der Liste, aber ich Gesicht mit folgendem Problem. Weiß jemand, was das Problem ist? Hier ist meine Matrix und Code:Auswahl von Spalten der Matrix basierend auf binären Vektor

> 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 

Meine erwartete Ausgabe ist:

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

Antwort

4

Sie werden es zu einem logischen Vektor konvertieren müssen oder sonst wird es 1 und 0 als Spaltennummern behandeln:

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

Wie auch den Spaltennamen beibehalten? – user2806363

+1

@ user2806363 Haben Sie es auf Ihren eigenen Daten versucht? Da Sie Ihre Daten nicht einfach in R kopieren/einfügen konnten, hat josilber wahrscheinlich keine Spaltennamen zu seinen Testdaten hinzugefügt. Diese Methode behält Spaltennamen bei. – MrFlick

+0

@ user2806363 Ich habe 'data' aktualisiert, um Spaltennamen zu haben - diese Untermengenermittlungsmethode behält Spaltennamen bei. – josliber

3

Sie können es auch versuchen. Wenn Sie nur select liefern, geben Sie an, Spalten nach Spaltennummer auszuwählen. Wenn Sie select==1 liefern, erhalten Sie zuerst einen logischen Vektor und verwenden diesen, um Spalten auszuwählen.

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 
Verwandte Themen