转换月份数字的向量
Transforming a vector of month numbers
以下向量包含月份数字。
x <- c(10,4,10,12,1,3,6,7,9,11,12,4,7,8)
具体来说,第一个元素是某年的第10个月,第二个元素是下一年的第4个月,以此类推。
我正在寻找一种在需要时在 x 的元素中添加 12 的方法,以便我得到这样的向量 y:
y <- c(10,16,22,24,25,27,30,31,33,35,36,40,43,44)
你建议怎么做?
我们可以用diff
比较相邻的元素,检查是否小于0来创建一个逻辑向量,用FALSE
拼接来解释[=11输出的长度差=], 得到 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
根据您提供的示例,我将遍历元素列表,每当我看到一个元素小于前一个元素时,将 n*12 添加到以下元素中。其中 n = 0 最初并在每次检测到比列表中的前一个更小的数字时递增。
不过,我的问题是,当您需要某一年的第二个月而不是那一年的其他月份,但例如第二年的第七个月时,您如何处理?您肯定需要一些东西来区分这种情况与同一年的第 2 个月和第 7 个月的情况。恐怕简单的数字列表还不够。
以下向量包含月份数字。
x <- c(10,4,10,12,1,3,6,7,9,11,12,4,7,8)
具体来说,第一个元素是某年的第10个月,第二个元素是下一年的第4个月,以此类推。 我正在寻找一种在需要时在 x 的元素中添加 12 的方法,以便我得到这样的向量 y:
y <- c(10,16,22,24,25,27,30,31,33,35,36,40,43,44)
你建议怎么做?
我们可以用diff
比较相邻的元素,检查是否小于0来创建一个逻辑向量,用FALSE
拼接来解释[=11输出的长度差=], 得到 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
根据您提供的示例,我将遍历元素列表,每当我看到一个元素小于前一个元素时,将 n*12 添加到以下元素中。其中 n = 0 最初并在每次检测到比列表中的前一个更小的数字时递增。
不过,我的问题是,当您需要某一年的第二个月而不是那一年的其他月份,但例如第二年的第七个月时,您如何处理?您肯定需要一些东西来区分这种情况与同一年的第 2 个月和第 7 个月的情况。恐怕简单的数字列表还不够。