свернуть несколько идентификаторов столбцов в один столбец идентификаторов - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь объединить некоторые данные. У меня есть данные, содержащие идентификаторы. Я хочу объединить каждый из столбцов в новый столбец finalID, который сворачивает все остальные столбцы в один столбец.

Для многих идентификаторов столбцов они будут одинаковыми, однако один или два столбца могут будь другим. Если они разные, то мне бы хотелось, чтобы второй идентификатор добавлялся в новый столбец finalID_WithDoubleResults, например.

Как я могу сначала свернуть столбцы в один столбец идентификатора Затем, если столбцы содержат разные идентификаторы. Разделите их на два или более новых столбца.

Данные:

structure(list(sabiUniqueID.x = c(74L, 82L, 129L, 153L, 179L, 
203L, 211L, 220L, 223L, 231L, 237L, 243L, 259L, 260L, 275L, 280L, 
290L, 292L, 297L, 300L), sabiUniqueID.y = c(74L, 82L, 129L, NA, 
NA, NA, 211L, NA, 223L, 231L, 237L, NA, NA, NA, NA, NA, 290L, 
NA, 297L, NA), sabiUniqueID.x.x = c(74L, 82L, 129L, 153L, NA, 
NA, 211L, NA, 223L, 231L, 237L, NA, NA, 260L, 275L, NA, 290L, 
292L, 297L, NA), sabiUniqueID.y.y = c(NA, NA, 129L, NA, 179L, 
203L, 211L, NA, 223L, NA, NA, NA, 259L, 260L, 275L, NA, 290L, 
292L, NA, NA), sabiUniqueID.x.x.x = c(NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 292L, NA, NA), sabiUniqueID.y.y.y = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 260L, 275L, NA, 
290L, NA, NA, NA), sabiUniqueID.x.x.x.x = c(74L, 82L, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 243L, NA, NA, NA, NA, NA, 292L, NA, 
NA), sabiUniqueID.y.y.y.y = c(74L, 82L, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, 260L, 275L, NA, 290L, NA, NA, NA), sabiUniqueID.x.x.x.x.x = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 290L, 
NA, NA, 300L), sabiUniqueID.y.y.y.y.y = c(74L, 82L, 129L, NA, 
179L, 203L, NA, NA, 223L, NA, NA, 243L, NA, 260L, NA, NA, 290L, 
292L, NA, 300L), sabiUniqueID.x.x.x.x.x.x = c(74L, 82L, 129L, 
153L, 179L, 203L, 211L, 220L, 223L, 231L, 237L, 243L, 259L, 260L, 
275L, 280L, 290L, 292L, 297L, 300L), sabiUniqueID.y.y.y.y.y.y = c(NA, 
82L, NA, NA, 179L, 203L, NA, NA, NA, NA, NA, 243L, 259L, 260L, 
NA, 280L, 290L, 292L, NA, 300L), sabiUniqueID = c(NA, 82L, NA, 
NA, 179L, 203L, NA, NA, NA, NA, NA, 243L, 259L, 260L, NA, 280L, 
290L, 292L, NA, 300L)), row.names = c(NA, -20L), groups = structure(list(
    sabiUniqueID.x = c(74L, 82L, 129L, 153L, 179L, 203L, 211L, 
    220L, 223L, 231L, 237L, 243L, 259L, 260L, 275L, 280L, 290L, 
    292L, 297L, 300L), sabiUniqueID.y = c(74L, 82L, 129L, NA, 
    NA, NA, 211L, NA, 223L, 231L, 237L, NA, NA, NA, NA, NA, 290L, 
    NA, 297L, NA), sabiUniqueID.x.x = c(74L, 82L, 129L, 153L, 
    NA, NA, 211L, NA, 223L, 231L, 237L, NA, NA, 260L, 275L, NA, 
    290L, 292L, 297L, NA), sabiUniqueID.y.y = c(NA, NA, 129L, 
    NA, 179L, 203L, 211L, NA, 223L, NA, NA, NA, 259L, 260L, 275L, 
    NA, 290L, 292L, NA, NA), sabiUniqueID.x.x.x = c(NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 292L, 
    NA, NA), sabiUniqueID.y.y.y = c(NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, 260L, 275L, NA, 290L, NA, NA, NA), 
    sabiUniqueID.x.x.x.x = c(74L, 82L, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 243L, NA, NA, NA, NA, NA, 292L, NA, NA), sabiUniqueID.y.y.y.y = c(74L, 
    82L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 260L, 275L, 
    NA, 290L, NA, NA, NA), sabiUniqueID.x.x.x.x.x = c(NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 290L, 
    NA, NA, 300L), sabiUniqueID.y.y.y.y.y = c(74L, 82L, 129L, 
    NA, 179L, 203L, NA, NA, 223L, NA, NA, 243L, NA, 260L, NA, 
    NA, 290L, 292L, NA, 300L), sabiUniqueID.x.x.x.x.x.x = c(74L, 
    82L, 129L, 153L, 179L, 203L, 211L, 220L, 223L, 231L, 237L, 
    243L, 259L, 260L, 275L, 280L, 290L, 292L, 297L, 300L), sabiUniqueID.y.y.y.y.y.y = c(NA, 
    82L, NA, NA, 179L, 203L, NA, NA, NA, NA, NA, 243L, 259L, 
    260L, NA, 280L, 290L, 292L, NA, 300L), .rows = structure(list(
        1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
        14L, 15L, 16L, 17L, 18L, 19L, 20L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr"))), row.names = c(NA, 20L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))

РЕДАКТИРОВАТЬ:

Меньшие данные

structure(list(sabiUniqueID.x = c(NA, NA, NA, NA, 820L), sabiUniqueID.y = c(1301L, 
                                                                            NA, NA, NA, 820L), sabiUniqueID.x.x = c(9999L, NA, 1176L, NA, 
                                                                                                                    820L), sabiUniqueID.y.y = c(NA, NA, NA, 1537L, 820L), sabiUniqueID.x.x.x = c(NA, 
                                                                                                                                                                                                 NA, NA, NA, 820L)), row.names = c(NA, -5L), class = c("tbl_df", 
                                                                                                                                                                                                                                                       "tbl", "data.frame"))

Что выглядит например:

    sabiUniqueID.x sabiUniqueID.y sabiUniqueID.x.x sabiUniqueID.y.y sabiUniqueID.x.x.x
           <int>          <int>            <int>            <int>              <int>
1             NA           1301             9999               NA                 NA
2             NA             NA               NA               NA                 NA
3             NA             NA             1176               NA                 NA
4             NA             NA               NA             1537                 NA
5            820            820              820              820                820

Где теперь я добавил результат 9999, и у него есть два идентификатора для этого наблюдения (другие наблюдения имеют дублированные идентификаторы).

Таким образом, ожидаемый результат может выглядеть например:

finalID  finalID_WithDoubleResults
1301         99999
NA            NA
1176          NA
1537          NA
820           NA

EDIT2:

df %>% 
  pivot_longer(cols = c(sabiUniqueID.x:sabiUniqueID.x.x.x), names_to = "id_type", values_to = "id_

value") %>% 
  group_by(id_type) %>% 
  arrange(desc(id_value)) %>% 
  distinct() %>% 
  #select(-c(id_type)) %>% 
  mutate(rowID = row_number()) %>% 
  pivot_wider(names_from = id_type, values_from = id_value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...