每年1月增加年份数

时间:2018-01-20 23:38:48

标签: r

我有一个类似于此的数据框:

enter image description here

我知道第一个障碍的开始年份(1963年)。 obs的确切时间顺序。所以下一个" Jan" (obs 13)表明这一年是1964年。有没有办法创建一个专栏" Year"每次下一次出现" Jan"发生?

在图片中,它将是" 1964"然后当" Jan"再次发生,1965年等等......

对于类似的问题有一个答案,但它并没有做到这一点,现在它是:

/* Structure describing the address of an AF_LOCAL (aka AF_UNIX) socket.  */
struct sockaddr_un
  {
    __SOCKADDR_COMMON (sun_);
    char sun_path[108];     /* Path name.  */
  };


#ifdef __USE_MISC
# include <string.h>        /* For prototype of `strlen'.  */

/* Evaluate to actual length of the `sockaddr_un' structure.  */
//                                                      vvv This is NULL?
# define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path)        \
              + strlen ((ptr)->sun_path))
#endif

但是这不会做到这一点:因为最后两个观察结果是同一个月(&#34; 12月和#34;然后是另一个&#34; 12月和#34;)年度计数增加:< / p>

enter image description here

最后一次观察仍应阅读&#34; 1960&#34;不是&#34; 1959&#34;。

1 个答案:

答案 0 :(得分:0)

OP已要求从1963年开始以升序顺序完成这些年。

以下方法在没有日期转换和虚拟日期的情况下工作,可以修改为适用于会计年度(see here)。

df$year <- 1963 + cumsum(c(0L, diff(100L*as.integer(
  factor(df$month, levels = month.abb)) + df$day) < 0))
df
  day month year
1  24   Jun 1963
2  21   Mar 1964
3  20   Jan 1965
4  10   Dec 1965
5  20   Jun 1966
6  20   Jan 1967
7  10   Dec 1967
8  15   Dec 1967

请注意,question似乎相似,但要求以降序顺序完成年份。需要在两个地方更改solution there才能在这里工作。