根据二进制向量选择矩阵的列

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
2个回答

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

如何同时保留列名? - user2806363
1
@user2806363 你有没有尝试在自己的数据上运行?由于你没有提供将数据轻松复制/粘贴到R中的方法,josilber可能没有为他的测试数据添加列名。这种方法将保留列名。 - MrFlick
@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接