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