2015-11-19 73 views
0

我有一個主要由重複行組成的數據集(data.frame)。我想對它進行子集化處理,以便只獲得最初沒有重複的行。原DF的例子:不重複的子集行

df1 <- data.frame(ID = c("1", "1","2","2","3","3","4","4"), V_1 = c(2011,2011,NA,NA,1,10,7,7), V_2= c(5,5,6,6,15,15,8,2))  

回答我倒是想了解:

df2 <- data.frame(ID = c("3","3","4","4"), V_1 = c(1,10,7,7), V_2= c(15,15,8,2))  

使用unique(df1)功能給了我唯一行的完整列表(在本例的情況下,6)。由於我的DF有超過20萬行,這對我來說是不夠的。

我已搜索類似的問題: Subset with unique cases, based on multiple columns,Filter rows based on multiple column conditions R,但他們都沒有幫助我。

回答

2

在這裏你去

duplicated.i = duplicated(df1) | (duplicated(df1[nrow(df1):1,]))[nrow(df1):1] 
df2 = df1[!duplicated.i,] 

# ID V_1 V_2 
# 5 3 1 15 
# 6 3 10 15 
# 7 4 7 8 
# 8 4 7 2 
1

我們可以去除重複行的ID和從整個數據幀排除他們

df1[!df1$ID %in% df1[duplicated(df1),1 ], ] 

# ID V_1 V_2 
#5 3 1 15 
#6 3 10 15 
#7 4 7 8 
#8 4 7 2