Мы можем сделать это также в data.table
library(data.table)
setDT(df)[, .(name = toString(name)),
.(group = cumsum(name != shift(name2, fill = TRUE)))]
# group name
#1: 1 yaaA, recF
#2: 2 yaaD
#3: 3 dck
#4: 4 dnaX, yaaK, recR
#5: 5 xpaC
#6: 6 yaaO
#7: 7 yaaQ, yaaR, holB, yaaT
#8: 8 yabB, yazA
data
df <- structure(list(name = c("yaaA", "recF", "yaaD", "dck", "dnaX",
"yaaK", "recR", "xpaC", "yaaO", "yaaQ", "yaaR", "holB", "yaaT",
"yabB", "yazA"), name2 = c("recF", "yaaB", "yaaE", "dgk", "yaaK",
"recR", "yaaL", "yaaN", "tmk", "yaaR", "holB", "yaaT", "yabA",
"yazA", "yabC"), IGD = c(16L, 18L, 22L, -3L, 24L, 15L, 18L, 19L,
-3L, 13L, 12L, 3L, 15L, -13L, -25L)), class = "data.frame",
row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15"))