Удалите дубликаты, отдавая приоритет указанному значению c в другом столбце в R - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно удалить дубликаты из столбца Ссылка, но по приоритетам оставить строку с указанным значением c в NODCCODE, если оно существует для этой группы ссылочных номеров. Если это значение NODCCODE не существует, не имеет значения, какая строка сохранена. В конце должны быть только уникальные ссылочные номера, но все экземпляры целевого NODCCODE и связанного ссылочного номера все еще должны существовать. Существует только один экземпляр NODCCODE на группу ссылочных номеров в начальном наборе данных. В приведенном ниже примере я использовал целевой NODCCODE "8835430200"

У меня есть следующие данные ...

structure(list(Reference = c("BBM101", "BBM101", 
"BBM101", "BBM101", "BBM101"), NODCCODE = c("8835020301", 
"8835400201", "8835430201", "8835430401", "8837010102"), Number = c(1, 
16, 30, 17, 2), hogN = c(0, 0, 0, 0, 0)), row.names = c(NA, -5L
), class = c("tbl_df", "tbl", "data.frame"))
# A tibble: 5 x 4
  Reference     NODCCODE   Number  hogN
  <chr>         <chr>       <dbl> <dbl>
1 BBM101 8835020301      1     0
2 BBM102 8835400201     16     0
3 BBM102 8835430200     30     0
4 BBM103 8835430401     17     0
5 BBM103 8837010102      2     0

КОНЕЦ РЕЗУЛЬТАТА:

structure(list(Reference = c("BBM101", "BBM102", "BBM103"), 
               NODCCODE = c("8835020301", "8835430200", "8835430401"), 
               Number = c(1, 30, 17), hogN = c(0, 0, 0)), 
          row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
# A tibble: 5 x 4
  Reference     NODCCODE   Number  hogN
  <chr>         <chr>       <dbl> <dbl>
1 BBM101 8835020301      1     0
2 BBM102 8835430200     30     0
3 BBM103 8835430401     17     0

Пожалуйста, дайте мне знать, если нужно больше начальных строк. Я старался держать его очень простым c.

Я пробовал много способов, включая

df2 <- bionum[order(bionum$Reference, bionum$NODCCODE=="8835430200"),]
de.duped <- df2[!duplicated(df2$Reference),]

Я получаю правильное количество ссылочных номеров, но это ставит мой целевой номер последним в Группа ссылок и сохранение первого экземпляра каждой ссылки, поэтому выходные данные не содержат ЛЮБОГО целевого значения NODCCODE.

Могу ли я получить его для сортировки моего целевого NODCCODE наверх в пределах ссылочного номера? Затем оставшаяся часть кода, которую я пытаюсь сохранить, сохранит первый экземпляр этого NODCCODE.

Я также просмотрел все другие связанные посты, которые могу найти, и просто не могу найти пути к этому. .

1 Ответ

0 голосов
/ 30 апреля 2020

Я понял это, мне просто нужно было добавить - () вокруг bionum $ NODCCODE == "8835430200", чтобы отсортировать его до вершины. Просто.

df2 <- bionum[order(bionum$Reference, -(bionum$NODCCODE=="8835430200")),]
de.duped <- df2[!duplicated(df2$Reference),]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...