这个问题在这里已经有了答案:
pair-wise duplicate removal from dataframe [duplicate]
(4 个回答)
4年前关闭。
在下面的数据框中,如果行有 Var1
的重复对(1 4 和 4 1 被认为是同一对),我只想保留一次行和 Var2
.我想到了排序Var1
和 Var2
在行内,然后根据 Var1
删除重复的行和 Var2
.但是,我没有达到我想要的结果。
这是我的数据的样子:
Var1 <- c(1,2,3,4,5,5)
Var2 <- c(4,3,2,1,5,5)
f <- c("blue","green","yellow","red","orange2","grey")
g <- c("blue","green","yellow","red","orange1","grey")
testdata <- data.frame(Var1,Var2,f,g)
我可以在行内排序,但是 f 和 g 列的值应该保持不变,我该怎么做?
testdata <- t(apply(testdata, 1, function(x) x[order(x)]))
testdata <- as.data.table(testdata)
然后,我想根据
Var1
删除重复的行和 Var2
我想得到这个结果:
Var1 Var2 f g
1 4 blue blue
2 3 green green
5 5 orange2 orange1
谢谢你的帮助!
最佳答案
如果人们有兴趣使用 dplyr 解决这个问题:
library(dplyr)
testdata %>%
rowwise() %>%
mutate(key = paste(sort(c(Var1, Var2)), collapse="")) %>%
distinct(key, .keep_all=T) %>%
select(-key)
# Source: local data frame [3 x 4]
# Groups: <by row>
#
# # A tibble: 3 × 4
# Var1 Var2 f g
# <dbl> <dbl> <fctr> <fctr>
# 1 1 4 blue blue
# 2 2 3 green green
# 3 5 5 orange2 orange1
关于删除重复的列对,基于 2 列对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29170099/