Вы можете попробовать рекурсию, которая вызывает сама себя, пока есть строки, которые могут быть дубликатами. Это очень опасно, поскольку поврежденный ввод будет работать до тех пор, пока не останется памяти.
removeDuplicates <- function(data) {
rm <- c(data[1, ]$V1, data[1, ]$V2)
dataAfter <- subset(data[seq_len(nrow(data))[-1], ], !V1 %in% rm & !V2 %in% rm)
return(rbind(data[1, ],
if (nrow(dataAfter) > 1) {
removeDuplicates(dataAfter)
} else {
NULL
}
))
}
removeDuplicates(Input)
ID V1 V2
1 1 A1 A1
4 4 G3 G2
Входные данные (модифицированные для устранения факторов):
Input <- data.frame(ID = c("1", "2", "3", "4", "5", "6", "7", "8"),
V1 = c("A1", "A1", "G2", "G3", "G3", "G1", "G3", "G1" ),
V2 = c("A1", "G2", "A1", "G2", "G3", "G3", "G1", "G3" ),
stringsAsFactors = FALSE)