根据R中的日期范围创建列

时间:2018-10-23 01:37:00

标签: r date

我需要根据另一列中的日期范围创建一列 范例: 我需要根据列“日期”创建一个列“拆分”,如下数据所示。 前5天为1,接下来的5天为2,依此类推。

我无法使用if else条件来创建新列,因为日期范围涵盖了将近10年

    Date    ID  split
1/1/2017    ABC 1
1/2/2017    ABC 1
1/3/2017    ABC 1
1/4/2017    ABC 1
1/5/2017    ABC 1
1/6/2017    ABC 2
1/7/2017    ABC 2
1/8/2017    ABC 2
1/9/2017    ABC 2
1/10/2017   ABC 2
1/1/2017    xyz 1
1/2/2017    xyz 1
1/3/2017    xyz 1
1/4/2017    xyz 1
1/5/2017    xyz 1
1/11/2017   EFG 3
1/12/2017   EFG 3
1/13/2017   EFG 3
1/14/2017   EFG 3
1/15/2017   EFG 3

1 个答案:

答案 0 :(得分:0)

为阐明我们对所需内容的理解,我们假设计算中不涉及ID列,我们只希望将1分配给最低的5个唯一日期,将2分配给接下来的5个唯一日期等等。在问题中,介于最大值和最小值之间的每个日期至少出现一次,因此我们假设是这种情况。根据显示的数据,我们希望将1分配给2017年1月的前5个日历日,将2分配给2017年1月的下5个日历日,并将3分配给2017年1月的下5个日历日。

我们可以将split计算为自第一天起的天数,然后将其除以5并取整数部分并加1。

不使用任何软件包。

d <- as.Date(DF$Date, format = "%m/%d/%Y")
transform(DF, split = as.numeric(d - min(d)) %/% 5 + 1)

给予:

        Date  ID split
1   1/1/2017 ABC     1
2   1/2/2017 ABC     1
3   1/3/2017 ABC     1
4   1/4/2017 ABC     1
5   1/5/2017 ABC     1
6   1/6/2017 ABC     2
7   1/7/2017 ABC     2
8   1/8/2017 ABC     2
9   1/9/2017 ABC     2
10 1/10/2017 ABC     2
11  1/1/2017 xyz     1
12  1/2/2017 xyz     1
13  1/3/2017 xyz     1
14  1/4/2017 xyz     1
15  1/5/2017 xyz     1
16 1/11/2017 EFG     3
17 1/12/2017 EFG     3
18 1/13/2017 EFG     3
19 1/14/2017 EFG     3
20 1/15/2017 EFG     3

注意

我们假设以下数据具有可重复形式:

Lines <- "Date    ID
1/1/2017    ABC
1/2/2017    ABC
1/3/2017    ABC
1/4/2017    ABC
1/5/2017    ABC
1/6/2017    ABC
1/7/2017    ABC
1/8/2017    ABC
1/9/2017    ABC
1/10/2017   ABC
1/1/2017    xyz
1/2/2017    xyz
1/3/2017    xyz
1/4/2017    xyz
1/5/2017    xyz
1/11/2017   EFG
1/12/2017   EFG
1/13/2017   EFG
1/14/2017   EFG
1/15/2017   EFG"

DF <- read.table(text = Lines, header = TRUE, as.is = TRUE, strip.white = TRUE)