我在以下问题中找不到要使用的正确代码:

我有一个数据集(DF),每个ROV横断面都有横断面(行).我想根据SECTIONS和变量Year和ROV创建一个新的ID列(即一个新的分组变量).我希望它包含前5个部分(行),然后是下5个部分,依此类推-直到基片或ROV发生变化.因此,并不是每个新的ID都会包含5个元素.

dataframe <- data.frame(
Year = c("2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2023","2023","2023"),
ROV=c("2","2","2","2","2","2","2","2","4","4","4","4","4","4","4","4"),
Section=c("3","4","5","6","7","8","9","10","1","2","3","4","5","6","7","8"),
Substrate=c("Mud","Mud","Mud","Mud","Mud","Mud","Mud","Mud","Bedrock","Bedrock","Bedrock","Bedrock","Dead Lophelia", "Dead Lophelia", "Bedrock","Bedrock"))
                        
result <- data.frame(Year = c("2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2023","2023","2023"), 
ROV=c("2","2","2","2","2","2","2","2","4","4","4","4","4","4","4","4"),
Section = c("3","4","5","6","7","8","9","10","1","2","3","4","5","6","7","8"),
Substrate= c("Mud","Mud","Mud","Mud","Mud","Mud","Mud","Mud","Bedrock","Bedrock","Bedrock","Bedrock","Dead Lophelia", "Dead Lophelia", "Bedrock","Bedrock"),
ID=c("1","1","1","1","1","2","2","2","3","3","3","3","4","6","7","7" ))


此代码每隔5行(=段)创建ID,但不考虑ROV或衬底的变化.我已经try 了Slice(),但没有得到所需的输出.有没有解决这个问题的办法?

dataframe$ID <- 1 + seq(0, nrow(dataframe) - 1) %/% 5

推荐答案

这是一种使用dplyr

library(dplyr)

dataframe %>%
  mutate(subgroup = rep(LETTERS, each = 5, length.out = n()),
                        .by = c(ROV, Substrate, Year)) %>%
  mutate(ID = cur_group_id(),
         .by = c(ROV, Substrate, Year, subgroup)) %>%
  select(-subgroup)
#>    Year ROV Section     Substrate ID
#> 1  2021   2       3           Mud  1
#> 2  2021   2       4           Mud  1
#> 3  2021   2       5           Mud  1
#> 4  2021   2       6           Mud  1
#> 5  2021   2       7           Mud  1
#> 6  2021   2       8           Mud  2
#> 7  2021   2       9           Mud  2
#> 8  2021   2      10           Mud  2
#> 9  2021   4       1       Bedrock  3
#> 10 2021   4       2       Bedrock  3
#> 11 2021   4       3       Bedrock  3
#> 12 2021   4       4       Bedrock  3
#> 13 2021   4       5 Dead Lophelia  4
#> 14 2023   4       6 Dead Lophelia  5
#> 15 2023   4       7       Bedrock  6
#> 16 2023   4       8       Bedrock  6

创建于2024-01-09年第reprex v2.0.2

R相关问答推荐

基于shiny 应用程序中的日期范围子集xts索引

咕噜中的元素列表:map

以R中的正确顺序将日期时间字符列转换为posixct

隐藏e_mark_line的工具提示

如何使用R对每组变量进行随机化?

使用case_match()和char数组重新编码值

单个轮廓重叠条的单独图例

在R中使用download. file().奇怪的URL?

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

如何得到每四个元素向量R?

通过在colname中查找其相应值来创建列

无法正确设置动态创建的Quarto标注的格式

使用R中的dist()迭代ID匹配的欧几里德距离

根据列表中项目的名称合并数据框和列表

如何计算R glm probit中的线性预测因子?

在纵向数据集中创建新行

为什么在写入CSV文件时Purrr::Pwalk不起作用

Conditional documentr::R中数据帧的summarize()

R仅当存在列时才发生变异

是什么打破了此Quarto仪表板中的工具提示?