R:生成索引值以将向量中的值增加分组

时间:2017-09-20 20:05:39

标签: r vector counter

我有一个增加年份值的列表,偶尔会有中断值,我想为每个不间断的序列创建一个分组值。想想像这样的矢量(缺少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
  • 标记差距之前或之后的记录
  • 我可以通过将其包装在哪个语句中来获取计数器应该更改的索引

这是执行每项操作的代码

ifelse(!is.na(lag(x)) & x == lag(x)+1, FALSE, TRUE)

which(ifelse(!is.na(lag(x)) & x == lag(x)+1, FALSE, TRUE))

1 个答案:

答案 0 :(得分:0)

我认为这个问题有两个解决方案。在上面的注释中发布了一个d.b,它将产生一个序列,每当序列中断时,该序列会递增。

cummax(c(1, diff(x)))

我选择使用ifelse()标记break和cumsum()的类似解决方案。我选择了这个解决方案,因为其他信息,如其他向量,可以包含在决策中,差异似乎有非常不稳定的上下值的问题。

cumsum(ifelse(!is.na(lag(x)) & x == lag(x) + 1, FALSE, TRUE))