根据一列中的值将所有列的行放在彼此后面

Place rows of all columns behind each other based on values in one column

我找不到正确的行组合方式。我有以下数据框:

Donornr    Final_location_DF.Location Final_location_DF.Date Familynr    Date_T4 Sample_volume_T4
1  449023 84278_V113_top shelf_blok1_A1             24/11/2020       13 24/11/2020               50
2  449027 84278_V113_top shelf_doos1_A1             24/11/2020       12 24/11/2020              300
3  449027 84278_V113_top shelf_blok1_A2             24/11/2020       12 24/11/2020              300
4  449028 84278_V113_top shelf_doos1_A2             24/11/2020       12 24/11/2020              300
5  449028 84278_V113_top shelf_blok1_A3             24/11/2020       12 24/11/2020              300

如您所见,在 Donornr 列中我们有重复的数字,但行值并不完全相同(主要在 Final_location_DF.location 列中)。我需要的是将重复的 donornumbers 放在一起,这样我最终会得到:

      Donornr    Final_location_DF.Location Final_location_DF.Date Familynr    Date_T4 Sample_volume_T4
        1  449023 84278_V113_top shelf_blok1_A1             24/11/2020       13 24/11/2020               50
        2  449027 84278_V113_top shelf_doos1_A1             24/11/2020       12 24/11/2020              300   449027 84278_V113_top shelf_blok1_A2             24/11/2020       12 24/11/2020              300 
        3  449028 84278_V113_top shelf_doos1_A2             24/11/2020       12 24/11/2020              300   449028 84278_V113_top shelf_blok1_A3             24/11/2020       12 24/11/2020              300

有什么办法吗?

非常感谢!

下面创建一个'id'列,用于区分同一Donornr中的情况,然后将数据框转换为宽格式。列名将是原始列名,并附加 _{id}。最后一步按您想要的顺序对列进行排序。

library(dplyr)
library(tidyr)

df %>%
  group_by(Donornr) %>%
  mutate(id = row_number()) %>%
  ungroup() %>%
  pivot_wider(id_cols = Donornr,
              names_from = id,
              values_from = Final_location_DF.Location:Sample_volume_T4) %>%
  select(Donornr, ends_with("_1"), everything())