如何使用一个数字序列填充"Night"列,每个数字序列重复3次,并根据"Site"列重新开始该序列?我已经创建了一个表格,显示我想要实现的目标.这是我的问题的简化版本,我需要能够在更大的数据帧上使用代码.
Site_date_time | Site | Night |
---|---|---|
1_01012023_2200 | 1 | 1 |
1_01012023_2300 | 1 | 1 |
1_02012023_0000 | 1 | 1 |
1_02012023_2200 | 1 | 2 |
1_02012023_2300 | 1 | 2 |
1_03012023_0000 | 1 | 2 |
2_01012023_2100 | 2 | 1 |
2_01012023_2200 | 2 | 1 |
2_01012023_2300 | 2 | 1 |
2_02012023_2200 | 2 | 2 |
2_02012023_2300 | 2 | 2 |
2_03012023_0000 | 2 | 2 |
2_03012023_2200 | 2 | 3 |
2_03012023_2300 | 2 | 3 |
2_04012023_0000 | 2 | 3 |
#Code to create basic data frame of Site
site <- c(rep(1,times=6), rep(2,times=9))
df <- data.frame(site)
我的主要问题是重新启动序列之前数字序列的长度不同(即每个站点的记录数量不同). 如果给定站点的行数相同,我可以使用以下内容.
library("dplyr")
library("data.table")
# Create data frame of the site vector, with the number of observations per site of equal length
site <- c(rep(1,times=6), rep(2,times=6))
df <- data.frame(site)
# Create sequence with repeated numbers
group_by(df,site) %>% mutate(night = rep(c(1:3), each=3))
但我需要一个函数,它允许我基于分组的向量的长度而不是定义的长度来创建一个具有重复数字的序列.我试图找到一种将rep()与seq_long()或rowid()相结合的方法,但没有成功.