Я пытаюсь объединить некоторые данные. У меня есть данные, содержащие идентификаторы. Я хочу объединить каждый из столбцов в новый столбец 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)