как удалить дубликаты из фрейма данных в R - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть фрейм данных с коэффициентами корреляции, подобный следующему.В кадре данных он имеет одинаковые коэффициенты корреляции 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

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Если другие методы не совсем работают, вы можете использовать временные строки min / max и de- 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

(Вы также можете временно назначить их столбцам вframe, ala

x$m1 <- pmin(x$Var1, x$Var2)
x$m2 <- pmax(x$Var1, x$Var2)
x[!duplicated(x[c("m1","m2")]),]

, хотя вам придется самостоятельно удалить временные переменные.)

0 голосов
/ 04 декабря 2018

Мы можем попробовать использовать пакет 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)

enter image description here

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...