I have a dataset.
test
Intervar
1 Uncertain significance PVS1=0 PS=[0, 1, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 0, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]
2 Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]
3 Pathogenic PVS1=1 PS=[0, 1, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]
4 Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]
5 Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]
6 Likely benign PVS1=0 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 0, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 1, 0, 0, 1, 0]
7 Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]
8 Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]
Each row follows the same pattern:
Pathogenic/Likely pathogenic/Uncertain significance/Likely benign/Benign PVS1=0 PS=[0,0,0,0,0] PM=[0,0,0,0,0,0,0] PP=[0,0,0,0,0,0] BA1=0 BS=[0,0,0,0,0] BP=[0,0,0,0,0,0,0,0]
I want to split it into multiple columns and name the column based on the character before the equal sign.
PVS1 PS1 PS2 PS3 PS4 PS5 PM1 PM2 PM3 PM4 PM5 PM6 PM7 PP1 PP2 PP3 PP4 PP5 PP6 ... BP1 BP2 BP3 BP4 BP5 BP6 BP7 BP8
1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0
2 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 ... 0 0 0 0 0 0 0 0
3 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 ... 0 0 0 0 0 0 0 0
4 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 ... 0 0 0 0 0 0 0 0
5 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 ... 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 1 0 0 1 0
7 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 ... 0 0 0 0 0 0 0 0
8 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 ... 0 0 0 0 0 0 0 0
data
structure(list(Intervar = c("Uncertain significance PVS1=0 PS=[0, 1, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 0, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]",
"Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]",
"Pathogenic PVS1=1 PS=[0, 1, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]",
"Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]",
"Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]",
"Likely benign PVS1=0 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 0, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 1, 0, 0, 1, 0]",
"Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]",
"Pathogenic PVS1=1 PS=[0, 0, 0, 0, 0] PM=[0, 1, 0, 0, 0, 0, 0] PP=[0, 0, 1, 0, 0, 0] BA1=0 BS=[0, 0, 0, 0, 0] BP=[0, 0, 0, 0, 0, 0, 0, 0]"
)), class = "data.frame", row.names = c(NA, -8L))
I've tried the following code to separate it and sum the number in the same bracket as a previous answer of another question suggested.
test$Intervar %>%
gsub(" (\\w+=)", "\n\\1", .) %>%
paste0("\nDescription=", .) %>%
gsubfn("\\[(.*?)\\]", ~ sum(scan(text = txt, sep = ",", quiet = TRUE)), .) %>%
gsub("=", ": ", .) %>%
textConnection %>%
read.dcf %>%
as.data.frame %>%
type.convert
The output was like
Description PVS1 PS PM PP BA1 BS BP
1 Uncertain significance 0 1 1 0 0 0 0
2 Pathogenic 1 0 1 1 0 0 0
3 Pathogenic 1 1 1 1 0 0 0
4 Pathogenic 1 0 1 1 0 0 0
5 Pathogenic 1 0 1 1 0 0 0
6 Likely benign 0 0 1 0 0 0 2
7 Pathogenic 1 0 1 1 0 0 0
8 Pathogenic 1 0 1 1 0 0 0
But this time, I want all numbers in the sampe bracket being separated.