Удаление зеркальных комбинаций переменных в кадре данных - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу получить каждую уникальную комбинацию двух переменных:

library(purrr)
cross_df(list(id1 = seq_len(3), id2 = seq_len(3)), .filter = `==`)
# A tibble: 6 x 2
    id1   id2
  <int> <int>
1     2     1
2     3     1
3     1     2
4     3     2
5     1     3
6     2     3

Как мне удалить зеркальные комбинации? То есть мне нужна только одна из строк 1 и 3 в приведенном выше фрейме данных, только одна из строк 2 и 5 и только одна из строк 4 и 6. Мой желаемый результат будет выглядеть примерно так:

# A tibble: 3 x 2
    id1   id2
  <int> <int>
1     2     1
2     3     1
3     3     2

Меня не волнует, находится ли конкретное значение id в id1 или id2, поэтому приведенные ниже значения так же приемлемы, как и вывод:

# A tibble: 3 x 2
    id1   id2
  <int> <int>
1     1     2
2     1     3
3     2     3

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Версия ответа Дэна:

cross_df(list(id1 = seq_len(3), id2 = seq_len(3)), .filter = `==`) %>% 
  mutate(min = pmap_int(., min), max = pmap_int(., max)) %>% # Find the min and max in each row
  unite(check, c(min, max), remove = FALSE) %>% # Combine them in a "check" variable
  distinct(check, .keep_all = TRUE) %>% # Remove duplicates of the "check" variable
  select(id1, id2)

# A tibble: 3 x 2
    id1   id2
  <int> <int>
1     2     1
2     3     1
3     3     2
0 голосов
/ 11 сентября 2018

Подход Base R:

# create a string with the sorted elements of the row
df$temp <- apply(df, 1, function(x) paste(sort(x), collapse=""))

# then you can simply keep rows with a unique sorted-string value
df[!duplicated(df$temp), 1:2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...