Roney, boa noite!
Já vi que o colega Rubem resolveu a questão. Tinha trabalhado noutra ideia, que deixo para consulta. Não é tão eficiente quanto a solução que vocês tiveram, mas é bem melhor que o código anterior.
# <code r>
setwd("C:/LAB/Temp/Roney"); getwd()
ver2 <- readRDS("ver2.rds")
str(ver2, max=1)
to <- Sys.time()
RES <- NULL
for(k in 2:length(ver2)){
df <- merge(ver2[[k-1]], ver2[[k]], by="name", all=T)
df <- df[order(df$grupo.x, df$grupo.y),]
tmp <- merge(aggregate(data=df, name~grupo.x+grupo.y, FUN="length"),
aggregate(data=df, PY.x~grupo.x+grupo.y, FUN="max"))
res <- data.frame(ID=k-1, G1=tmp[,1], G2=tmp[,2], n=tmp[,3], anobase=tmp[,4])
RES <- rbind(RES, res[order(res$G1, res$G2),])
}
Sys.time()-to
head(RES)
# </code>