R语言 基于字符串将列拆分为行

qv7cva1a  于 10个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我有三个列,它们有多个值,但其后包含不同的字符串。这些值出现在“;”之后,但字符串不同。我希望能够将下面的列转换为两个。也可以有两个以上的值,我在这个例子中使用了两个。
我有一排这个;

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)]")

  • 行2
Cola <- c("Pxxxx8")
Colb <- c("Pxxxx8 [1-24]")
Colc <- c("Pxxxx8 1xAcetyl [N-Term]; 1xPhospho [S10(100)]")

fiei3ece

fiei3ece1#

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)

相关问题