Мы можем group_by
id
и создать последовательность между текущим row_number
и общим числом строк в каждой группе и объединить соответствующие value
с toString
.
library(dplyr)
library(tidyr)
df %>%
group_by(id) %>%
mutate(reqd1 = map2_chr(row_number(),n(),~toString(value[.x:.y])))
# id value reqd reqd1
# <fct> <fct> <fct> <chr>
#1 a x x,z,p x, z, p
#2 a z z,p z, p
#3 a p p p
#4 b q q,q q, q
#5 b q q q
#6 c m m,n,x,y m, n, x, y
#7 c n n,x,y n, x, y
#8 c x x,y x, y
#9 c y y y
Мы также можем сделать это, используя только базу R с ave
with(df, ave(value, id, FUN = function(x)
mapply(function(i, j) toString(x[i:j]), seq_along(x), length(x))))
#[1] "x, z, p" "z, p" "p" "q, q" "q" "m, n, x, y" "n, x, y" "x, y" "y"