2015-11-19 96 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