2012-12-13 41 views
1

我正在計算矩陣中的列的邏輯向量,我想用它來查看數據的子集。我將如何結合將邏輯向量和附加元素結合起來排除

duplicate.ids <- c(1, 10, 100) 

data$Group == data$Group[person] & data$Unit != 13 & data$Unit != 17 

讓我可以用一個邏輯向量?

ETA:

我有一個數值矩陣:

R> class(All) 
[1] "matrix" 
R> dim(All) 
[1] 6712 6712 
R> All[1:5,1:5] 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 0 0 0 0 0 
[2,] 0 0 0 0 0 
[3,] 0 0 0 0 0 
[4,] 0 0 0 0 0 
[5,] 0 0 0 0 0 

我對每一列的元數據的另一個矩陣,我想選擇這個矩陣進行進一步的子集分析。我可以運行第二個命令獲取邏輯向量,我就可以使用獲得的子集

All[,data$Group == data$Group[person] & data$Unit != 13 & data$Unit != 17] 

,但我也希望排除索引(我前面提到的duplicate.ids)的具體名單。

+0

第二個代碼塊將返回行標號,但你說你正在計算列的邏輯向量。你在問如何使用行和列索引來子集?你能詳細說明一下嗎? –

+0

1.我認爲你有一個'data.frame'而不是一個矩陣。 2.你將它分配給某些東西嗎? 3.你想用'duplicate.ids'做什麼?以及你想要做哪一列?也許包含一部分'data'使用'dput(head(data))'會幫助我們理解。 – Justin

回答

0

您可以使用which將您的邏輯向量轉換爲索引向量,然後使用setdiff來計算集合差異,即第二個表達式所選列不在重複列表中的所有列。

綜上所述:

All[,setdiff(which(data$Group == data$Group[person] & data$Unit != 13 & data$Unit != 17), 
      duplicate.ids)] 

作爲一種選擇,你可以把duplicate.ids成一個邏輯向量以及:

non.duplicate <- rep(TRUE, ncol(All)) 
non.duplicate[duplicate.ids] <- FALSE 
ALL[,non.duplicate & data$Group == data$Group[person] & data$Unit != 13 & data$Unit != 17]