Уже есть принятый ответ, но вот еще один, возможно, больше похожий на опубликованный ожидаемый результат.
aggregate(ENTREZ ~ GVR, genes, function(x){
x <- paste(x, collapse = ', ')
paste0('[', x, ']')
})
# GVR ENTREZ
#1 chr15.gvr7.17 [114791, 283767, 100996331, 390538, 283694]
#2 chr15.gvr8.16 [123606, 81614, 23191]
#3 chr15.gvr9.15 [283685, 7681]
Или в формате JSON.
agg <- aggregate(ENTREZ ~ GVR, genes, paste)
jsonlite::toJSON(agg, "values", pretty = TRUE)
#[
# ["chr15.gvr7.17", ["114791", "283767", "100996331", "390538", "283694"]],
# ["chr15.gvr8.16", ["123606", "81614", "23191"]],
# ["chr15.gvr9.15", ["283685", "7681"]]
#]
Данные.
genes <- read.table(text = "
GVR ENTREZ
1 chr15.gvr7.17 114791
2 chr15.gvr7.17 283767
3 chr15.gvr7.17 100996331
4 chr15.gvr7.17 390538
5 chr15.gvr7.17 283694
6 chr15.gvr8.16 123606
7 chr15.gvr8.16 81614
8 chr15.gvr8.16 23191
9 chr15.gvr9.15 283685
10 chr15.gvr9.15 7681
", header = TRUE)