czrdiao 发表于 2016-2-12 08:48 
如果真的是cheetahfly说的,我这个方法好像比较简单
x = c("max", "unit", "rate", "max", "unit", "rate" ...
czrdiao同学创造性地用一阶差分和向量化rep来解决该问题,给了我很大的启发,多谢!
我一直有种感觉,这个问题可以有一个非常简单直接的解决方法的。受
czrdiao同学思路的启发,我另想了一个简化思路:既然group.id是用来标明相对位置和寻找缺失行的相对坐标,因此,没有必要一定从max开始循环。我完全可以跳开第一行,然后从第二行的unit开始循环,这样,在同样可以解决问题的条件下,语句只需要简化成一行即可:
group.id <- cumsum(data[,1] == "unit")
有了标明每组(无论是否完整)max、unit、rate循环的相对位置的group.id后,要解决楼主所提出来的补齐数据就比较容易了,一个思路是用大神Hadley Wickham提出来的Split-Apply-Combine策略,用plyr::ddply()来解决;另一个思路按向量化的方式,根据setdiff()函数,找出缺失max行和rate行的相对“坐标”,然后创建——合并——排序,具体怎么做就不啰嗦了。