Удаление строк взаимных ссылок в R-кадре данных, т. Е. Когда значение (a, b) в строке существует как (b, a) в другой строке того же кадра данных - PullRequest
0 голосов
/ 27 сентября 2019

Допустим, у меня есть датафрейм (df), где он должен содержать дружеские связи между людьми.Таким образом, значение (например, индивидуальный идентификатор) в столбце A и значение в столбце B указывает, что индивидуум A является другом (в отношениях) с индивидуумом B. Фактически, такой df может быть легко преобразован в график (например, igraph).

Так как отношения взаимны, достаточно, чтобы у нас были значения A - B.

Однако у меня такой большой df, когда некоторые строки также содержат значения B - A (например, ориентированный граф, A - друг B, а B - друг A, который является избыточным) ивопрос в том, как удалить эти избыточные строки.

вот очень простой пример:

df <- data.frame("A"= c(1, 10, 1,  1,  2,  2, 14, 4),
                 "B"= c(10, 1, 11, 12, 13, 14, 2, 15))

A          B
1         10
10         1
1         11
1         12
2         13
2         14
14        2
4         15 

После удаления взаимных ссылок df должен стать:

A          B
1         10
1         11
1         12
2         13
2         14
4         15

1 Ответ

1 голос
/ 27 сентября 2019

Полагаю, вы ищете что-то подобное.

Сортируйте фрейм данных по горизонтали.Удалить повторяющиеся строки.

df <- data.frame("A" = c(1, 10, 1,  1,  2,  2, 14, 4),
                     "B" = c(10, 1, 11, 12, 13, 14, 2, 15))
sorted <- t(apply(df, 1, function(x) sort(x)))
df[!duplicated(sorted), ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...