从矩阵中排除特定列

时间:2014-09-06 17:10:56

标签: r

我有一个数字列表(示例如下):

[[178]]
NULL

[[179]]
[1] 179  66

[[180]]
[1] 180  67

[[181]]
[1] 181 123

[[182]]
[1] 182

此列表包含我想从矩阵中排除的列(179,66,180,67,181,123)。

我试过命令,但他们没有工作:

MyMatrix[, !(unlist(MyList))]
MyMatrix[, -(unlist(MyList))]
MyMatrix[, !unlist(MyList)]
MyMatrix[, -unlist(MyList)]

我的问题:从矩阵中排除特定列的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这是我对你的问题的小规模复制。

listOfColumns<-list(NULL, c(2,3), 5, NULL)
listOfColumns  #print for viewing
#output
#[[1]]
#NULL

#[[2]]
#[1] 2 3

#[[3]]
#[1] 5

#[[4]]
#NULL

MyMatrix<-matrix(1:50, nrow=10, ncol=5)
MyMatrix    #print for viewing
#output
 #        [,1] [,2] [,3] [,4] [,5]
 #[1,]    1   11   21   31   41
 #[2,]    2   12   22   32   42
 #[3,]    3   13   23   33   43
 #[4,]    4   14   24   34   44
 #[5,]    5   15   25   35   45
 #[6,]    6   16   26   36   46
 #[7,]    7   17   27   37   47
 #[8,]    8   18   28   38   48
 #[9,]    9   19   29   39   49
 #[10,]   10   20   30   40   50

首先,您希望对矩阵进行子集以便忽略给定列数的方式是

MyMatrix[-columnNumbers]

在R中,用于子集的负数对应于应该省略的条目。

以下通话输出是您想要的

 MyMatrix[,-unlist(listOfNumbers)] 
#output
#      [,1] [,2]
# [1,]    1   31
# [2,]    2   32
# [3,]    3   33
# [4,]    4   34
# [5,]    5   35
# [6,]    6   36
# [7,]    7   37
# [8,]    8   38
# [9,]    9   39
# [10,]   10   40

如果你想保留这个结果供以后使用,你需要存储它(正如David Robinson所说)

MySmallerMatrix<-MyMatrix[,-unlist(listOfNumbers)]