我有一个增加年份值的列表,偶尔会有中断值,我想为每个不间断的序列创建一个分组值。想想像这样的矢量(缺少2005,2011):
x <- c(2001,2002,2003,2004,2006,2007,2008,2009,2010,2013,2014,2015,2016)
我想生成一个等长的向量,它使用相同的索引对运行中的每个值进行编号,最终得到类似的结果。
[1] 1 1 1 1 2 2 2 2 2 3 3 3 3
我想使用最佳R练习这样做,所以我试图避免回到for循环但我不知道如何从Vector A到Vector B.有没有人有任何建议?
我知道我可以做的一些事情:
这是执行每项操作的代码
ifelse(!is.na(lag(x)) & x == lag(x)+1, FALSE, TRUE)
which(ifelse(!is.na(lag(x)) & x == lag(x)+1, FALSE, TRUE))
答案 0 :(得分:0)
我认为这个问题有两个解决方案。在上面的注释中发布了一个d.b,它将产生一个序列,每当序列中断时,该序列会递增。
cummax(c(1, diff(x)))
我选择使用ifelse()标记break和cumsum()的类似解决方案。我选择了这个解决方案,因为其他信息,如其他向量,可以包含在决策中,差异似乎有非常不稳定的上下值的问题。
cumsum(ifelse(!is.na(lag(x)) & x == lag(x) + 1, FALSE, TRUE))