2013-10-07 63 views
0

從兩個大型數據框中刪除匹配ID的最可靠方法是什麼?刪除R中的數據行

例如,我有一個不想聯繫的參與者列表(n = 200)。我想從我的超過100個變量和200,000個觀察值的數據集中刪除它們。

這是我需要從數據集中刪除的200個參與者ID的列表。

exclude=read.csv("/home/Project/file/excludeids.csv", header=TRUE, sep=",") 
dataset.exclusion<- dataset[-which(exclude$ParticipantId %in% dataset$ParticipantId ), ] 

這是正確的命令嗎?

我不認爲這個命令做我想要的,因爲當我用下面的驗證:length(which(dataset.exclusion$ParticipantId %in% exclusion$ParticipantId)) 我沒有得到0

任何見解?

+0

這是很容易幫助你,如果你提供一個[最小的,可重複的例子(http://stackoverflow.com/questions/5963269/如何對做 - 一個偉大-R-重複性,例如/ 5963610#5963610)。 – Henrik

+0

數據集相當龐大。每位參與者都有一個獨特的7位身份證,其中包含DOB,性別和各種問卷數據的變量。我有一個參與者ID的特定列表,他們不希望進一步聯繫(這不是原始數據集中的變量),因此希望從數據框中刪除這些〜200行。 – Tan

+0

如鏈接中所述,您不需要在_minimal_可重現的示例中發佈整個數據。查看@ Codoremifa答案中的虛擬數據 - 幾行可輕鬆適用於R控制檯,並且只有相關的列。不多,不少。 – Henrik

回答

2

比如,你可以這樣做:

sample1[!sample1$ParticipantID %in% 
      unique(exclusion$ParticipantId),] 
+0

這就是我一直在尋找的,謝謝! – Tan

1

像這樣?

library(data.table) 

dataset <- data.table(
a = c(1,2,3,4,5,6), 
b = c(11,12,13,14,15,16), 
d = c(21,22,23,24,25,26) 
) 

setkeyv(dataset, c('a','b')) 

ToExclude <- data.table(
a = c(1,2,3), 
b = c(11,12,13) 
) 

dataset[!ToExclude] 

# a b d 
# 1: 4 14 24 
# 2: 5 15 25 
# 3: 6 16 26