2013-07-03 29 views
1

假設我有一個包含6列和100000行的數據幀。我想根據另一個向量reducedScenIds(10,000行)中的索引/數字來選擇矩陣originScen中的行。我通過檢查如果Y中的每個成員的值在數據幀X的1列中的值相匹配現在第一列可以有多個匹配對於Y的每個值選擇行R從另一個向量中選擇矩陣中的行(匹配,%)

所以我用下面的

reducedSet <- originScen[which(originScen[,1] %in% reducedScenarioIds),] 

我對結果沒問題,只是which%in%似乎破壞了reducedScenarioIds向量的順序。最後的reducedSet具有根據在reducedScenarioIds向量中找到的ID的升序而選擇的行,而不是完全相同的順序。

originScen[,1]可以具有重複的條目爲在reducedScenarioIds

任何每個條目有一個替代的解決方案?

感謝

+0

你應該能夠刪除了'which'和剛剛%的人使用''%。 – Thomas

回答

2

試試這個:

reducedSet <- originScen[originScen[,1] %in% reducedScenarioIds,][order(na.exclude(match(originScen[,1], reducedScenarioIds))),] 
+0

感謝您的回答!完美的作品。不明白如何。因此,首先使用originScen [originScen [,1]%in%reducedScenarioIds]生成縮減的場景集合,然後第二部分將按索引出現在reducedScenarioIds中的方式對其進行排序。 na.exclude在這裏如何? – user2547134

+0

我添加了'na.exclude'來刪除'originScen [,1]'包含'reducedScenarioIds'中不存在的值的情況,因爲在這些情況下'match'的結果是'NA'。 –