Close enough?
library(tidyr)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
DF <- data.frame(ID=rep(1:3,each=3),
V1=paste0("A",1:9),
V2=paste0("B",1:9),
V3=paste0("C",1:9),
V4=paste0("D",1:9))
DF
#> ID V1 V2 V3 V4
#> 1 1 A1 B1 C1 D1
#> 2 1 A2 B2 C2 D2
#> 3 1 A3 B3 C3 D3
#> 4 2 A4 B4 C4 D4
#> 5 2 A5 B5 C5 D5
#> 6 2 A6 B6 C6 D6
#> 7 3 A7 B7 C7 D7
#> 8 3 A8 B8 C8 D8
#> 9 3 A9 B9 C9 D9
DFlng <- pivot_longer(DF,V1:V4)
DFall <- DFlng %>% group_by(ID) %>%
summarize(Alltext=paste(value,collapse=","))
#> `summarise()` ungrouping output (override with `.groups` argument)
DF <- inner_join(DF,DFall,by="ID")
DF
#> ID V1 V2 V3 V4 Alltext
#> 1 1 A1 B1 C1 D1 A1,B1,C1,D1,A2,B2,C2,D2,A3,B3,C3,D3
#> 2 1 A2 B2 C2 D2 A1,B1,C1,D1,A2,B2,C2,D2,A3,B3,C3,D3
#> 3 1 A3 B3 C3 D3 A1,B1,C1,D1,A2,B2,C2,D2,A3,B3,C3,D3
#> 4 2 A4 B4 C4 D4 A4,B4,C4,D4,A5,B5,C5,D5,A6,B6,C6,D6
#> 5 2 A5 B5 C5 D5 A4,B4,C4,D4,A5,B5,C5,D5,A6,B6,C6,D6
#> 6 2 A6 B6 C6 D6 A4,B4,C4,D4,A5,B5,C5,D5,A6,B6,C6,D6
#> 7 3 A7 B7 C7 D7 A7,B7,C7,D7,A8,B8,C8,D8,A9,B9,C9,D9
#> 8 3 A8 B8 C8 D8 A7,B7,C7,D7,A8,B8,C8,D8,A9,B9,C9,D9
#> 9 3 A9 B9 C9 D9 A7,B7,C7,D7,A8,B8,C8,D8,A9,B9,C9,D9
Created on 2021-02-25 by the reprex package (v0.3.0)