2012-05-08 59 views
1

我有2個數據集。從R中較大的列表中減去名稱列表

A = 3085行,1列。 B = 527行,1000列。

這兩個數據集中的所有值都是shapefile的名稱。

我想創建A - B [,1]的新列表。 A.k.a我想從A中刪除出現在B的第一列中的任何值。

我最終將循環顯示所有1000列。

如果任何人都可以提供幫助,將不勝感激。

問候,

+0

相反,有沒有什麼方法來創建只是在兩個列表中重複的值的列表? – JPD

+0

我只是通過刪除!來解決這個問題。 – JPD

回答

1

如果ABdata.framesmatrices可以使用這樣的程序

A[!(A[,1] %in% B[,1]), 1] 

我剛纔完全實現你的問題。要循環使用B的所有列,您可以使用apply家庭功能。此調用將迭代B的每列作爲x參數,並將返回長度等於列數B的列表,列表中的每個元素都將是A的不匹配元素向量與B對應列的向量。

apply(B, 2, function(x) A[!(A[,1] %in% x), 1]) 
+0

+1 - 好多了! – Simbamangu

+0

謝謝你的回覆。這很好。我用循環函數替換了第二個到最後一個,它完成了這項工作。 – JPD

+0

@JPD - 不要忘了標記DrDom的回答[如同接受](http://meta.stackexchange.com/a/5235),如果它是你正在尋找的! – Simbamangu

1

要簡單(但未經測試):

x <- A[, 1] 
keep <- seq_along(x) 
for(i in seq_along(B)) 
    keep <- setdiff(keep, which(x[keep] %in% B[, i])) 
A[keep, ]