Мы можем получить номера строк, когда trt == C
, а затем использовать rep
, чтобы повторить их
inds <- which(df$trt == "C")
df[sort(c(1:nrow(df), rep(inds, 2))), ]
# trt A B
#1 A 34 58
#2 B 2 11
#3 C 57 67
#3.1 C 57 67
#3.2 C 57 67
#4 A 77 99
#5 B 37 70
#6 C 93 46
#6.1 C 93 46
#6.2 C 93 46
#7 A 61 17
#8 B 24 1
#9 C 16 54
#9.1 C 16 54
#9.2 C 16 54
Другая концепция может состоять в filter
строках, где trt == "C"
, повторять их и привязать к строкам где trt != "C"
. Используя dplyr
, мы можем реализовать его как
library(dplyr)
df %>%
filter(trt == "C") %>%
slice(rep(row_number(), 3)) %>%
bind_rows(df %>% filter(trt != "C"))