我有一个与以下随机数据类似的数据帧:

data<- data.frame(
  id = c('TEC', 'TEC', 'TEC', 'TEC', 'FIL', 'FIL', 'FIL'),
  date = c('2009-10', '2009-11', '2009-12', '2010-04', '2000-05', '2006-10', '2006-11')
)

data$date <- ym(data$date)

set.seed(123)  
data$re <- sample(1:100, nrow(data), replace = TRUE)

现在,我需要创建一个新的专栏,在其中我们必须根据组来放置数字.我是说,首先,我需要按身份分组.然后,在每个ID中,我需要基于连续日期的组.例如,在本例中,第一个id=TEC的第一个日期在2009-10,第二个日期是连续的(逐月)2009-11,第三个日期也是连续的,但是,第四个日期不是连续的.因此,我需要将前三个观察结果放入组1,将第四个观察结果放入组2.然后,使用下一个ID(FIL).第一个观察需要在组1中,第二个日期和第三个日期是连续的,在组2中也是如此.

我需要将其概括为一个巨大的数据帧,但具有相同的格式.

最终输出(在这个随机样本中)需要如下:

Final desired output

谢谢!

推荐答案

下面是dplyr种方法:

library(dplyr)

data %>%
  group_by(id) %>%
  mutate(is_consecutive = (date == lag(date) %m+% months(1))) %>% 
  mutate(group = cumsum(!is_consecutive == TRUE | is.na(is_consecutive)), .keep = "unused") %>% 
  ungroup()

 id    date          re group
  <chr> <date>     <int> <int>
1 TEC   2009-10-01    31     1
2 TEC   2009-11-01    79     1
3 TEC   2009-12-01    51     1
4 TEC   2010-04-01    14     2
5 FIL   2000-05-01    67     1
6 FIL   2006-10-01    42     2
7 FIL   2006-11-01    50     2

R相关问答推荐

在ComplexHeatmap中,如何更改anno_barplot()标题的Angular ?

将一个载体的值相加,直到达到另一个载体的值

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

从API中抓取R数据SON

如何使用shinyChatR包配置聊天机器人

如果列中存在相同的字符串,则对行值进行总和

计算R中的威布尔分布的EDF

名称输出pmap on tible

R-更新面内部的栅格值

删除具有相同标题的tabPanel(shinly)

IMF IFS数据以R表示

我正在努力用R计算数据集中的中值逐步距离

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

计算两列中满足特定条件连续行之间的平均值

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

将统计检验添加到GGPUBR中的盒图,在R

防止正则表达式覆盖以前的语句

长/纬点继续在堪萨斯-SF结束,整齐的人口普查

使用函数从R中的列中删除标高

在分面的ggplot2条形图中对条形图进行排序,并省略每组未使用的系数级别