添加序列的列计数重复

时间:2019-02-06 15:02:53

标签: r dplyr tidyverse

我正尝试在数据框中添加一列,以计算序列运行的次数-在这种情况下,几个月的时间最多为12。

我从月份和年份开始,但是为了进行分析,我需要使用经过调整的month_lag列。

year.reprex <- rep(1982:2015, each=12)
month.reprex <- rep(1:12, times=34)
df <- cbind(year.reprex, month.reprex) %>% 
  as_tibble() %>% 
  mutate(
    month_lag = ifelse(month.reprex < 12, month.reprex+1, 1))

我想添加一个带有数字计数器的列,以表示month_lag达到12的次数。month_lag的第一个值为2,所以我不能只计算1:12的序列数。此计数器将从实际年份列偏移一个月。在此reprex中,对于前11行(month_lag从2变为12),我希望year_counter为1。当month_lag在第12行中重置为1时,year_counter应该增加为2,并且每次month_lag运行时继续加价最多12点,并从1开始。如果可能,dplyr解决方案将是很好的选择。

1 个答案:

答案 0 :(得分:1)

只要None为1,我们就可以增加一个计数器,可以使用month_lag

cumsum

或在基数

library(dplyr)

df %>% mutate(year_lag = cumsum(month_lag == 1) + 1)

# year.reprex month.reprex month_lag   year_lag
#         <int>        <int>     <dbl>    <dbl>
# 1        1982            1         2        1
# 2        1982            2         3        1
# 3        1982            3         4        1
# 4        1982            4         5        1
# 5        1982            5         6        1
# 6        1982            6         7        1
# 7        1982            7         8        1
#....