2014-09-06 63 views
0

我有號碼的列表(例如波紋管):排除特定列從矩陣

[[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)] 

我的問題:什麼是從一個矩陣排除特定列的正確方法?

+0

要確認:這是一個'data.table',而不是'data.frame',對嗎? – 2014-09-06 17:13:41

+0

@DavidRobinson,我糾正了我的錯誤。顯然這個數據結構是一個矩陣。 – PoGibas 2014-09-06 17:17:34

+4

你只是在運行'MyMatrix [, - (unlist(MyList))]'而不是代碼'MyMatrix < - MyMatrix [, - (unlist(MyList))]''? (如果是這樣,那是你的錯誤)。 – 2014-09-06 17:20:18

回答

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 

如果你想保持這個結果以備後用,你需要將它存儲(正如大衛·羅賓遜在GOT)

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