可能不是最优雅的......只是添加另一种方式。
set.seed(123)
data <- data.frame(years = sample(2000:2010, 50, replace = T))
cbind(data[order(data), ], unlist(sapply(rle(data[order(data), ])$lengths, FUN = seq)))
## [,1] [,2]
## [1,] 2000 1
## [2,] 2000 2
## [3,] 2000 3
## [4,] 2001 1
## [5,] 2001 2
## [6,] 2001 3
## [7,] 2001 4
## [8,] 2001 5
## [9,] 2002 1
## [10,] 2002 2
## [11,] 2002 3
## [12,] 2002 4
## [13,] 2002 5
## [14,] 2003 1
## [15,] 2003 2
## [16,] 2003 3
## [17,] 2003 4
## [18,] 2004 1
## [19,] 2004 2
## [20,] 2004 3
## [21,] 2004 4
## [22,] 2004 5
## [23,] 2005 1
## [24,] 2005 2
## [25,] 2005 3
## [26,] 2005 4
## [27,] 2005 5
## [28,] 2006 1
## [29,] 2006 2
## [30,] 2006 3
## [31,] 2007 1
## [32,] 2007 2
## [33,] 2007 3
## [34,] 2007 4
## [35,] 2007 5
## [36,] 2007 6
## [37,] 2008 1
## [38,] 2008 2
## [39,] 2008 3
## [40,] 2009 1
## [41,] 2009 2
## [42,] 2009 3
## [43,] 2009 4
## [44,] 2009 5
## [45,] 2009 6
## [46,] 2010 1
## [47,] 2010 2
## [48,] 2010 3
## [49,] 2010 4
## [50,] 2010 5
**根据 Arun 的建议,以下更简单。
cbind(data[order(data), ],sequence(rle(data[order(data), ])$lengths))