我正在尝试创建一个调查日编号列。该列应包含重复的数字,每次日期更改时,重复的数字都会增加到下一个连续的数字。每当调查列中的值更改时,这些连续值的计数也应重新开始。
我正在Mac High Sierra上使用R版本1.1.463
我尝试使用接近的data.frame::rleid()
函数,提供从rleid(x$DATE)
开始的每个日期连续变化的重复值,但是我不知道如何在{{ 1}}值更改。结果应如下所示,但在现实世界中,SURVEY
值将超过2 ...
SURVEY.DAY
我看过here和here,但它们要么太复杂,要么就不是我真正需要的。理想情况下,我希望对现有代码
DATE<-rep(c("2012-03-12", "2012-03-13", "2012-04-21", "2012-04-22", "2012-09-07", "2012-09-08"), each=4)
x<- data.frame(DATE= c(DATE), SURVEY=c(rep(1:3, each=8)), SURVEY.DAY= c(rep(1:2, each=4)))
DATE SURVEY SURVEY.DAY
1 2012-03-12 1 1
2 2012-03-12 1 1
3 2012-03-12 1 1
4 2012-03-12 1 1
5 2012-03-13 1 2
6 2012-03-13 1 2
7 2012-03-13 1 2
8 2012-03-13 1 2
9 2012-04-21 2 1
10 2012-04-21 2 1
11 2012-04-21 2 1
12 2012-04-21 2 1
13 2012-04-22 2 2
14 2012-04-22 2 2
15 2012-04-22 2 2
16 2012-04-22 2 2
17 2012-09-07 3 1
18 2012-09-07 3 1
19 2012-09-07 3 1
20 2012-09-07 3 1
21 2012-09-08 3 2
22 2012-09-08 3 2
23 2012-09-08 3 2
24 2012-09-08 3 2
编辑
请注意,给出的示例只是我创建的任意示例,以显示所需的结果。我选择了这些日期,希望可以通过更改每个调查的月份来使新的调查更加清晰,但是在我的数据中,月份和调查编号之间没有模式。
答案 0 :(得分:0)
这个怎么样?
library(tidyverse)
library(data.table)
x %>%
group_by(SURVEY) %>%
mutate(SURVEY.DAY = rleid(DATE))
# A tibble: 24 x 3
# Groups: SURVEY [3]
DATE SURVEY SURVEY.DAY
<fct> <int> <int>
1 2012-03-12 1 1
2 2012-03-12 1 1
3 2012-03-12 1 1
4 2012-03-12 1 1
5 2012-03-13 1 2
6 2012-03-13 1 2
7 2012-03-13 1 2
8 2012-03-13 1 2
9 2012-04-21 2 1
10 2012-04-21 2 1
11 2012-04-21 2 1
12 2012-04-21 2 1
13 2012-04-22 2 2
14 2012-04-22 2 2
15 2012-04-22 2 2
16 2012-04-22 2 2
17 2012-09-07 3 1
18 2012-09-07 3 1
19 2012-09-07 3 1
20 2012-09-07 3 1
21 2012-09-08 3 2
22 2012-09-08 3 2
23 2012-09-08 3 2
24 2012-09-08 3 2