转换月份数字的向量

时间:2016-08-23 08:52:40

标签: r vector diff

以下向量包含月份数。

x <- c(10,4,10,12,1,3,6,7,9,11,12,4,7,8)

具体来说,第一个元素是某年的第10个月,第二个元素是第二个月的第4个月,等等。 我正在寻找一种方法在需要时在x的元素中添加12,这样我得到一个像这样的向量:

y <- c(10,16,22,24,25,27,30,31,33,35,36,40,43,44)

你会怎么建议这样做?

2 个答案:

答案 0 :(得分:2)

我们可以将相邻元素与diff进行比较,检查它是否小于0来创建逻辑向量,与FALSE连接以考虑diff输出的长度差异,得到cumsum,乘以12并加到x

x+ cumsum(c(FALSE, diff(x)< 0)) *12
#[1] 10 16 22 24 25 27 30 31 33 35 36 40 43 44

答案 1 :(得分:2)

根据您提供的示例,我将遍历元素列表,每当我看到一个小于前一个元素的元素时,将n * 12添加到以下元素中。最初n = 0,每次检测到的数字小于列表中的前一个数字时递增。

我的问题是,当你需要从某一年开始的第二个月而不是那个月的时候你会如何处理,但是从第二年开始的第7个月呢?当你有同一年的第二个月和第七个月时,你肯定需要一些东西来区分这个案例。我害怕这个简单的数字列表是不够的。