'Combine a character value under one statement in R

I will need to combine an object under one umbrella.

Here is a sample object.

object <- c("Equal = (G1, 20, Slope[0]); Equal = (G1, 20, Slope[1]);", 
            "Equal = (G1, 21, Slope[0]); Equal = (G1, 21, Slope[1]);",
            "Equal = (G1, 22, Slope[0]); Equal = (G1, 22, Slope[1]);")

> object
[1] "Equal = (G1, 20, Slope[0]); Equal = (G1, 20, Slope[1]);" 
    "Equal = (G1, 21, Slope[0]); Equal = (G1, 21, Slope[1]);"
    "Equal = (G1, 22, Slope[0]); Equal = (G1, 22, Slope[1]);"

what I would like to do is as below:

"Equal = (G1, 20, Slope[0]), (G1, 20, Slope[1]),
(G1, 21, Slope[0]), (G1, 21, Slope[1]),
(G1, 22, Slope[0]), (G1, 22, Slope[1]);"

Basically, I need to

(1) combine all under one "Equal" statement.
(2) replace`;` with `,` between statements,
(3) keep one `;` at the end of the object. 

Any ideas? Thanks!



Solution 1:[1]

We can use a little regex to do so.

gsub("(?!^);\\s{0,1}Equal =", ",", paste(object, collapse = ""), perl = T)

[1] "Equal = (G1, 20, Slope[0]), (G1, 20, Slope[1]), (G1, 21, Slope[0]), (G1, 21, Slope[1]), (G1, 22, Slope[0]), (G1, 22, Slope[1]);"

Solution 2:[2]

gsub("[; ]+Equal =",',',paste(object, collapse = ''))

[1] "Equal = (G1, 20, Slope[0]), (G1, 20, Slope[1]), (G1, 21, Slope[0]), (G1, 21, Slope[1]), (G1, 22, Slope[0]), (G1, 22, Slope[1]);"

Solution 3:[3]

You can use str_extract_all() from stringr to extract all texts surrounded by parentheses.

library(stringr)

str_c("Equal = ", toString(unlist(str_extract_all(object, "\\(.+?\\)"))), ";")

# [1] "Equal = (G1, 20, Slope[0]), (G1, 20, Slope[1]), (G1, 21, Slope[0]), (G1, 21, Slope[1]), (G1, 22, Slope[0]), (G1, 22, Slope[1]);"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 benson23
Solution 2 onyambu
Solution 3 Darren Tsai