根据R中的2个条件列创建连续的编号列

时间:2019-06-25 10:56:50

标签: r dataframe

我正在尝试创建一个调查日编号列。该列应包含重复的数字,每次日期更改时,重复的数字都会增加到下一个连续的数字。每当调查列中的值更改时,这些连续值的计数也应重新开始。

我正在Mac High Sierra上使用R版本1.1.463

我尝试使用接近的data.frame::rleid()函数,提供从rleid(x$DATE)开始的每个日期连续变化的重复值,但是我不知道如何在{{ 1}}值更改。结果应如下所示,但在现实世界中,SURVEY值将超过2 ...

SURVEY.DAY

我看过herehere,但它们要么太复杂,要么就不是我真正需要的。理想情况下,我希望对现有代码 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

进行略微修改

编辑

请注意,给出的示例只是我创建的任意示例,以显示所需的结果。我选择了这些日期,希望可以通过更改每个调查的月份来使新的调查更加清晰,但是在我的数据中,月份和调查编号之间没有模式。

1 个答案:

答案 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