如何使用一个数字序列填充"Night"列,每个数字序列重复3次,并根据"Site"列重新开始该序列?我已经创建了一个表格,显示我想要实现的目标.这是我的问题的简化版本,我需要能够在更大的数据帧上使用代码.

Image of table

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()相结合的方法,但没有成功.

推荐答案

您可以使用rep()length.out参数.从docs人开始:

length.out:非负整数.输出向量的所需长度.其他输入将被强制为双倍向量,并取第一个元素.如果为不可用或无效,则忽略.

您的分组向量的长度可以用dplyr::n()来计算.

library(dplyr)

df |>
    mutate(night = rep(seq_len(n()), each = 3, length.out = n()), .by = site)
#    site night
# 1     1     1
# 2     1     1
# 3     1     1
# 4     1     2
# 5     1     2
# 6     1     2
# 7     2     1
# 8     2     1
# 9     2     1
# 10    2     2
# 11    2     2
# 12    2     2
# 13    2     3
# 14    2     3
# 15    2     3

此外,正如您在问题中包含的library(data.table)一样,如果dfdata.table,则可以对data.table语法使用相同的方法,使用.N而不是n():

df[, night := rep(seq_len(.N), each = 3, length.out = .N), site]

R相关问答推荐

用R从API中提取数据

如何使用ggplot重新绘制LASO回归图?

多个ggpredicate对象的平均值

使用spatVector裁剪网格数据时出现的问题

R Lubridate:舍入/快照日期时间到一天中最近的任意时间?

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

R箱形图gplot 2 4组但6个参数

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

在GGPLATE中将突出的点放在前面

我如何才能找到FAMILY=POISSON(LINK=&Q;LOG&Q;)中的模型预测指定值的日期?

如何在观测缺失的地方添加零

矩阵的堆叠条形图,条形图上有数字作为标签

在不丢失空值的情况下取消列出嵌套列表

R:用GGPLATE,如何在两个独立的变量中制作不同形状的散点图?

将箭头绘制在图形外部,而不是图形内部

如果COLSUM为>;0,则COLNAME为向量

减go R中列表的所有唯一元素对

计算使一组输入值最小化的a、b和c的值

如何为混合模型输出绘制不同的线型?

R:使用ApexCharge更改标签在饼图中的位置