我有一个主要由重复行组成的数据集(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,但他们都没有帮助我。
答案 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