2014-05-15 3 views
5

내 코드의 일부분에서 필자는 이진 행렬을 기반으로하는 행렬의 특정 열을 선택하여 목록에 저장해야하지만 다음과 같은 문제가 있습니다. 아무도 문제가 뭔지 알고 있습니까?바이너리 벡터를 기반으로하는 행렬 선택

> 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 

내 예상 출력은 다음과 같습니다 : 여기 내 매트릭스 코드

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

답변

4

당신은 논리적 인 벡터로 변환해야합니다 그렇지 않으면이 열 번호로 1과 0을 처리합니다 :

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

어떻게 열 이름을 보존합니까? – user2806363

+1

@ user2806363 자신의 데이터로 사용해 보셨습니까? jilber는 자신의 데이터를 R에 복사/붙여 넣기하는 쉬운 방법을 만들지 않았으므로 아마도 테스트 데이터에 이름을 추가하지 않았을 것입니다. 이 메서드는 colnames를 보존합니다. – MrFlick

+0

@ user2806363 컬럼 이름을 갖도록'data'를 업데이트했습니다 -이 서브 세트 방법은 컬럼 이름을 유지합니다. – josliber

3

시도해 볼 수도 있습니다. select을 제공하는 경우 열 번호별로 열을 선택하라는 메시지가 나타납니다. select==1을 제공 할 때 먼저 논리 벡터를 얻고이를 사용하여 열을 선택합니다.

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 
관련 문제