我有三列,它们具有多个值,但此后包含不同的字符串。这些值出现在“;”之后但字符串不同。我希望能够将下面的专栏变成两栏。也可以有两个以上的值,我在这个例子中只使用了两个。
我连续有这个;
Cola <- c("Qxxxx7; Pxxxx8")
Colb <- c("Qxxxx7 [1-24]; Pxxxx8 [1-24]")
Colc <- c("Qxxxx7 1xAcetyl [N-Term]; 1xPhospho [S4(100)]; Pxxxx8 1xAcetyl [N-Term]; 1xPhospho [S10(100)]")
我需要将它们分成两行。
Cola <- c("Qxxxx7")
Colb <- c("Qxxxx7 [1-24]")
Colc <- c("Qxxxx7 1xAcetyl [N-Term]; 1xPhospho [S4(100)]")
Cola <- c("Pxxxx8")
Colb <- c("Pxxxx8 [1-24]")
Colc <- c("Pxxxx8 1xAcetyl [N-Term]; 1xPhospho [S10(100)]")
do.call(cbind, sapply(df1, function(x) strsplit(x, split = "; (?=Pxx)", perl = T)))
#> Cola Colb Colc
#> [1,] "Qxxxx7" "Qxxxx7 [1-24]" "Qxxxx7 1xAcetyl [N-Term]; 1xPhospho [S4(100)]"
#> [2,] "Pxxxx8" "Pxxxx8 [1-24]" "Pxxxx8 1xAcetyl [N-Term]; 1xPhospho [S10(100)]"
如果您还有其他列,
tidyr::separate_rows
会让事情变得更容易:
library(tidyr)
df1 %>% separate_rows(Cola, Colb, Colc, sep = "; (?=Pxx)")
创建于 2023-12-06,使用 reprex v2.0.2
Cola <- c("Qxxxx7; Pxxxx8")
Colb <- c("Qxxxx7 [1-24]; Pxxxx8 [1-24]")
Colc <- c("Qxxxx7 1xAcetyl [N-Term]; 1xPhospho [S4(100)]; Pxxxx8 1xAcetyl [N-Term]; 1xPhospho [S10(100)]")
df1 <- data.frame(Cola , Colb, Colc)