удалить повторяющиеся значения с предпочтением удаления из наибольшей группы - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть отметка, для которой я хочу удалить строки с дублирующимися значениями, но с предпочтением для удаления из самой большой группы .

Пример данных:

(tb <- tibble(group = rep(LETTERS[1:3], times = 3:1),
             value = c(4,2,1,1,2,1)))
# A tibble: 6 x 2
  group value
  <chr> <dbl>
1 A         4
2 A         2
3 A         1
4 B         1
5 B         2
6 C         1

Здесь значения 1 и 2 дублируются.Для случая 1 я хочу удалить его из 2 больших групп (A и B) и сохранить значение для C. Аналогично, строки для значения 2 должны быть удалены из группы A. (Когда размеры группы связаны, не имеет значения, из какой группы удаляется строка.)

Желаемый результат

# A tibble: 3 x 2
  group value
  <chr> <dbl>
1 A         4
2 B         2
3 C         1

Использование tb %>% filter(!duplicated(value)) работает для удаления дубликатов, но непринять во внимание размеры групп:

Фактический результат

# A tibble: 3 x 2
  group value
  <chr> <dbl>
1 A         4
2 A         2
3 A         1

Существует ли (простой) переход на другую сторону, чтобы учитывать размеры групп при удалении дубликатов?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

Как насчет этого:

tb %>% group_by(group) %>%
  mutate(size = n()) %>% group_by(value) %>%
  filter(size == min(size))

group value  size
  <chr> <dbl> <int>
1 A         4     3
2 B         2     2
3 C         1     1

0 голосов
/ 15 апреля 2019

что по этому поводу:

 tb <- tibble(group = rep(LETTERS[1:3], times = 3:1),
 value = c(4,2,6,1,2,1))

group value
  <chr> <dbl>
1 A         4
2 A         2
3 A         6
4 B         1
5 B         2
6 C         1

tb %>% group_by(value) %>% filter(group == max(group))

group value
  <chr> <dbl>
1 A         4
2 A         6
3 B         2
4 C         1

tb <- tibble(group = rep(LETTERS[1:3], times = 3:1),
              value = c(4,2,1,1,2,1))

 group value
  <chr> <dbl>
1 A         4
2 A         2
3 A         1
4 B         1
5 B         2
6 C         1

tb %>% group_by(value) %>% filter(group == max(group))

group value
  <chr> <dbl>
1 A         4
2 B         2
3 C         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...