我想给自第一年以来重复出现的月份分配数字。lubridate
软件包具有month
,该软件包计算一年中最多12个月的月份,即
month(e$date)
[1] 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6
然而,我正在寻找这样的东西:
month date
1 2019-01-1
2 2019-02-1
3 2019-03-1
4 2019-04-1
5 2019-05-1
6 2019-06-1
7 2019-07-1
8 2019-08-1
9 2019-09-1
10 2019-10-1
11 2019-11-1
12 2019-12-1
13 2020-01-1
14 2020-02-1
15 2020-03-1
16 2020-04-1
17 2020-05-1
18 2020-06-1
19 2020-07-1
20 2020-08-1
21 2020-09-1
22 2020-10-1
23 2020-11-1
24 2020-12-1
25 2021-01-1
26 2021-02-1
27 2021-03-1
28 2021-04-1
29 2021-05-1
30 2021-06-1
month(e$date)
[1] 1 1 2 3 4 5 6 7 8 9 10 11 12 2 3 4 5 6 7 8 9 10 11 12 5
[26] 3 2 4 1 6
当下一年到来时,有没有办法让数字从12继续下去?当然,当有一个更大的数据集,日期分散时,这会更复杂,所以我如何才能根据最早的年份来实现这一点;月
一些可重复的日期:
structure(list(date = structure(c(18262, 17897, 17928, 17956,
17987, 18017, 18048, 18078, 18109, 18140, 18170, 18201, 18231,
18293, 18322, 18353, 18383, 18414, 18444, 18475, 18506, 18536,
18567, 18597, 18748, 18687, 18659, 18718, 18628, 18779), class = "Date")), class = "data.frame", row.names = c(NA,
-30L))
假设一个月有30天,您可以减去所有具有最小值的日期。
round(as.numeric(df$date - min(df$date))/30)
如果您知道您有月度数据,则每个月都有一个条目,您可以对数据进行排序并创建序列列。
df <- df[order(df$date), , drop = FALSE]
df$month <- 1:nrow(df)
在dplyr
中,这将是-
library(dplyr)
df %>% arrange(date) %>% mutate(month = row_number())
我们可以使用data.table
library(data.table)
setDT(d)[order(date), month = .I]