Удалить дубликаты на основе второго столбца - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь написать часть кода, которая делает несколько вещей: 1) набор групповых данных по идентификатору 2) подсчитать количество уникальных месяцев в столбце data.month 3) удалить все удостоверения личности, которые имеют менее 9 месяцев 4) распечатать отдельные идентификаторы на основе компании (то есть дважды распечатать идентификатор, если он связан с двумя компаниями) 5) удалить дублированный идентификатор и сохранить запись с наибольшим номером data.month.

У меня есть код, работающий до 5). Я не могу получить свой код, чтобы распечатать только запись (строку) дубликатов идентификаторов с наибольшим номером месяца.

Я посмотрел несколько примеров здесь:

R удалить дубликаты на основе других столбцов

Удаление дубликатов на основе условия 2-го столбца

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

Это два кода, которые я пытался достичь своей цели:

data.check6 <- bind %>%
group_by(bind$ABN) %>%
summarise(count = n_distinct(data.month)) %>%
filter(count>8) %>%
rrange(bind$data.month) %>%
filter(row_number() == 1)

и

 library(tidyverse)

 data.check7 <- bind %>%
  group_by(ABN)%>%      
  filter(1 == length(unique(bind$data.month)), !duplicated(bind$data.month))

Прямо сейчас я получаю ошибку:

Ошибка вrange_impl (.data, точки): неверный размер (345343) в позиция 1, ожидая: 3749

В конце я хотел бы иметь набор данных, в котором каждый идентификатор появляется только один раз, и это запись идентификатора, связанная с наибольшим месяцем (т. Е. Значение столбца = 12)

1 Ответ

1 голос
/ 23 мая 2019

Я думаю, вы ищете что-то подобное:

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

> bind <- data.frame(ABN = rep(1:3, 3),
+                    data.month = sample(1:12, 9),
+                    other.inf = runif(9))
> 
> bind
  ABN data.month other.inf
1   1         10 0.8102867
2   2          4 0.2919716
3   3          8 0.3391790
4   1          2 0.3698933
5   2          6 0.9155280
6   3          1 0.2680165
7   1          9 0.7541168
8   2          7 0.2018796
9   3         11 0.1546079

Решение:

> bind %>%
+   group_by(ABN) %>%      
+   filter(data.month == max(data.month))
# A tibble: 3 x 3
# Groups:   ABN [3]
    ABN data.month other.inf
  <int>      <int>     <dbl>
1     1         10     0.810
2     2          7     0.202
3     3         11     0.155
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...