我有一个相关系数的数据帧,如下所示。在数据帧中,其相关系数a*b
和b*a
相同。如何删除这些重复项?谁能帮忙
**Var1, Var2, r**
ApoA1.ng.ml.1, Apo.B.ng.ml, 0.9998438
Apo.B.ng.ml, ApoA1.ng.ml.1, 0.9998438
SLM.T0., TBW.T0., 0.9992563
TBW.T0., SLM.T0., 0.9992563
Insulin.mercdiaConc..U.L, Insulin..pg.ml, 0.9313702
Insulin..pg.ml, Insulin.mercdiaConc..U.L, 0.9313702
答案 0 :(得分:2)
我们可以在此处尝试使用sqldf
软件包:
library(sqldf)
sql <- "SELECT MIN(Var1, Var2), MAX(Var2, Var1), MAX(r) AS R
FROM df
GROUP BY MIN(Var1, Var2), MAX(Var2, Var1)"
df_out <- sqldf(sql)
答案 1 :(得分:2)
如果其他技术不太奏效,则可以使用临时的最小/最大字符串,并从这些字符串中去duplicated
:
x <- read.csv(stringsAsFactors=FALSE, text="
Var1,Var2,r
ApoA1.ng.ml.1,Apo.B.ng.ml,0.9998438
Apo.B.ng.ml,ApoA1.ng.ml.1,0.9998438
SLM.T0.,TBW.T0.,0.9992563
TBW.T0.,SLM.T0.,0.9992563
Insulin.mercdiaConc..U.L,Insulin..pg.ml,0.9313702
Insulin..pg.ml,Insulin.mercdiaConc..U.L,0.9313702")
x[!duplicated(pmin(x$Var1, x$Var2),pmax(x$Var1, x$Var2)),]
# Var1 Var2 r
# 1 ApoA1.ng.ml.1 Apo.B.ng.ml 0.9998438
# 3 SLM.T0. TBW.T0. 0.9992563
# 5 Insulin.mercdiaConc..U.L Insulin..pg.ml 0.9313702
(您也可以将它们临时分配给框架中的列ala
x$m1 <- pmin(x$Var1, x$Var2)
x$m2 <- pmax(x$Var1, x$Var2)
x[!duplicated(x[c("m1","m2")]),]
尽管您随后必须自己删除临时变量。)