我的数据如下:
df <- data.frame(x=c("A","B","C","D"), y=c("B","A","D","C"), z=c(2,2,0.4,0.4), stringsAsFactors = F)
x y z
A B 2
B A 2
C D 0.4
D C 0.4
我想要的数据如下:
A B 2
C D 0.4
我该怎么做?
答案 0 :(得分:1)
使用:
df[,1:2] <- t(apply(df[,1:2], 1, sort))
df[!duplicated(df),]
会给:
x y z
1 A B 2.0
3 C D 0.4
答案 1 :(得分:0)
您可以使用以下代码。
dat1 <- data.frame(X=c("A","B","C","D"),Y=c("B","A","D","C"),Z=c(2,2,0.4,0.4),stringsAsFactors = F)
dat1
X Y Z
1 A B 2.0
2 B A 2.0
3 C D 0.4
4 D C 0.4
让我们定义一个函数,我们可以用它来按行对记录进行排序并将其折叠成一个向量。
sort_paste <- function(x){ paste(sort(x),collapse=";") }
check_dups <- apply(dat1,1,sort_paste)
check_dups
[1] "2.0;A;B" "2.0;A;B" "0.4;C;D" "0.4;C;D"
dat1[ which(! duplicated(check_dups)), ]
X Y Z
1 A B 2.0
3 C D 0.4
答案 2 :(得分:0)
假设您只是尝试删除z列中的重复项:
subset(df, !duplicated(z))
答案 3 :(得分:0)
我们可以使用pmin/pmax
library(data.table)
setDT(df)[!duplicated(pmin(x,y), pmax(x,y))]
# x y z
#1: A B 2.0
#2: C D 0.4