Найдите уникальные пары слов, игнорирующие их порядок в двух столбцах в R - PullRequest
0 голосов
/ 30 января 2019

У меня есть фрейм данных, который содержит дублированные значения в двух столбцах.

   dat<-data.frame(V1 = c("home","cat","fire","sofa","kitchen","sofa"), 
                    V2 = c("cat","home","water","TV","knife","TV"), V3 = c('date1','date1','date2','date3','date4','date3'))

       V1    V2    V3
1    home   cat date1
2     cat  home date1
3    fire water date2
4    sofa    TV date3
5 kitchen knife date4
6    sofa    TV date1

Я хотел бы получить из этого кадра данных уникальные пары, игнорируя порядок, в котором пара представлена ​​между двумя столбцами.

Я бы хотел получить такой результат:

       V1    V2    V3
1    home   cat date1
2    fire water date2
3    sofa    TV date3
4 kitchen knife date4

Ответы [ 2 ]

0 голосов
/ 30 января 2019
library(igraph)
myList = lapply(split(dat, dat$V3), function(x) {  # Split the data by third column
    g1 = graph.data.frame(x, directed = FALSE)  # create undirected graph
    g2 = simplify(g1, remove.multiple = TRUE)  # remove duplicates (same pairs)
    get.edgelist(g2)   #Convert to list of pairs
})

# Add the date back and then combine rows
do.call(rbind, lapply(names(myList), function(nm) data.frame(myList[[nm]], nm)))
#       X1    X2    nm
#1    home   cat date1
#2    fire water date2
#3    sofa    TV date3
#4 kitchen knife date4
0 голосов
/ 30 января 2019

dat[!duplicated(t(apply(dat, 1, sort))),]

Использование apply и sort будет проходить по каждой строке и сортировать.Затем мы можем транспонировать вывод и определить дубликаты, используя duplicated.Так как duplicated возвращает логическое значение, мы затем помещаем все строки в dat, где duplicated = FALSE.

...