基于二元向量选择矩阵列

时间:2014-05-15 03:42:43

标签: r

在我的一段代码中,我需要根据我所拥有的二进制矩阵选择矩阵的某些列,并将其存储在列表中,但我面临以下问题。有人知道这是什么问题吗? 这是我的矩阵和代码:

    > 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

2 个答案:

答案 0 :(得分:5)

您需要将其转换为逻辑向量,否则它会将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

答案 1 :(得分: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