R: найти идентичные комбинации по нескольким столбцам - PullRequest
0 голосов
/ 05 июня 2018

Мне трудно объяснить, что я ищу, но я стараюсь изо всех сил, поэтому терпите меня.У меня есть следующие данные, которые содержат пары отдельных лиц и определенное значение для каждой пары:

Col1  Col2  Value
A     B     90
E     F     90
B     A     50
C     D     50
F     E     90

Что я хочу сделать, это найти идентичные комбинации (то есть и A & B и B & A) и их соответствующие значенияи собрать их вместе.Однако не все комбинации там двойные (в моем примере это только C & D, но не D & C).

Я попытался скопировать данные во 2-м кадре данных, затем развернуть col1 и col2 и затем отсортироватьпо кол.Это дает мне следующее:

Col1  Col2  Value  Dummy
A     B     90     1
A     B     50     2
C     D     50     1
E     F     90     1
E     F     90     2
B     A     50     1
B     A     90     2
D     C     50     2
F     E     90     1
F     E     90     2

Но тогда в моих данных все еще есть и A & B, и B & A.В идеале я хотел бы закончить с этим:

Col1  Col2  Value
A     B     90
B     A     50
C     D     50
E     F     90
F     E     90

Я надеюсь, что мой вопрос ясен, но в остальном я счастлив попытаться объяснить себя лучше!

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы можете попробовать что-то вроде data %>% distinct(Col1, Col2, Value) %>% arrange(Col1)

0 голосов
/ 05 июня 2018

Используя базу R, мы упорядочиваем сначала по столбцу min, затем по 1-му столбцу:

df[with(df,order(pmin(Col1,Col2),pmax(Col1,Col2),Col1)),]

#   Col1 Col2 Value
# 1    A    B    90
# 3    B    A    50
# 4    C    D    50
# 2    E    F    90
# 5    F    E    90

Спасибо @akrun за подсказку.

tidyverse решение будет:

library(dplyr)
df %>% arrange(pmin(Col1,Col2),pmax(Col1,Col2),Col1)

предыдущее решение:

df[order(
  apply(df[1:2],1,function(x) paste(sort(x),collapse="")),
  df$Col1),]

данные

df <- read.table(text=
"Col1  Col2  Value
A     B     90
E     F     90
B     A     50
C     D     50
F     E     90",h=T,strin=F
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...