子集行不重复

时间:2015-11-19 12:30:38

标签: r

我有一个主要由重复行组成的数据集(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 columnsFilter rows based on multiple column conditions R,但他们都没有帮助我。

2 个答案:

答案 0 :(得分: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 :(得分: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