df %>% group_by_at(.vars=-1) %>% summarize(IDs=list(ID))
Аналогично решению Sotos, но упрощает выбор столбца ID, предполагая, что все остальные столбцы должны быть уникальными, а столбец ID будет столбцом списков, а не строкой.
# A tibble: 2 x 4
# Groups: Var1, Var2 [2]
Var1 Var2 Var3 IDs
<int> <int> <int> <list>
1 0 0 1 <chr [2]>
2 1 1 0 <chr [1]>
Просто для удовольствия, вы можете еще больше упростить его, используя функцию tidyr
nest
:
require(tidyr)
nest(df,IDs=ID)
# A tibble: 2 x 4
Var1 Var2 Var3 IDs
<int> <int> <int> <S3: vctrs_list_of>
1 0 0 1 1_1, 1_3
2 1 1 0 1_2
Это по-прежнему оставляет идентификаторы в виде списка, который может или не может быть полезным для вас, но отображает это более четко в таблице. Дополнительным преимуществом сохранения столбца в виде списка, а не строки, является то, что вы можете легко воссоздать исходную таблицу, используя unnest
:
unnest(nest(dd,IDs=ID),cols=IDs)
# A tibble: 3 x 4
Var1 Var2 Var3 ID
<int> <int> <int> <chr>
1 0 0 1 1_1
2 0 0 1 1_3
3 1 1 0 1_2