如果满足条件,则复制一系列值

Replicate a range of values if condition is satisfied

我正在尝试向下面的示例数据框添加一列(事务),其中的逻辑是对于索引列中的每个“新值”,值的复制将重新开始。索引中的值将在整个数据帧(150,000 多行)中随机标记为“新”。我希望第一行以 1 开头,并且在每个 1:3 序列之后,序列将在 3 之后的 1 处重新开始,除非索引列中有“New”,其中序列会自动重新开始在 1. 我曾尝试以各种组合方式使用 rep()ifelse,但收效甚微。此外,交易列当前为空,没有任何值。提前致谢!

索引 交易
1
2
3
1
2
3
1
2
1
2
3
1
1
2

这是第一次尝试:

library(tidyverse)

# Creating the data frame: 
df <- data.frame(index = rep("", 14))
df[c(7,9,13), 'index'] <- 'New'


# Defining a run index:
df$run <- cumsum(df$index == "New")


df %>% 
  group_by(run) %>% 
  mutate(Transaction = ifelse( (1:n())%%3==0, 3, 1:n()%%3  )) %>%
  ungroup() %>% select(-run)

  # A tibble: 14 x 2
   index Transaction
   <chr>       <dbl>
 1 ""              1
 2 ""              2
 3 ""              3
 4 ""              1
 5 ""              2
 6 ""              3
 7 "New"           1
 8 ""              2
 9 "New"           1
10 ""              2
11 ""              3
12 ""              1
13 "New"           1
14 ""              2