如何使用R将ID分隔成不同的行



我正在使用R。我在数据帧中有一列。以下是该列的一部分示例:

|NEW.ID|
|------|
|P02538 [551-559]; P04259 [551-559]|
|A0A0B4J2F2 1xPhospho [T473]|
|Q8IVF2 1xPhospho [S1253]; 1xPhospho [S1748]|
|A0A1B0GX95 2xPhospho [S24; S26]|

我想将有两个登录代码ID的行分开。虽然ID用";"分隔,我需要考虑到一些ID可能有一个";"例如上面列中的第三行。如果我有一个条件,说明它是否有"];"然后是一封信,把这一行分开。然而,我不知道该怎么做。

所以在上面的示例栏中,我想要实现:

|NEW.ID|
|------|
|P02538 [551-559]|
|P04259 [551-559]|
|A0A0B4J2F2 1xPhospho [T473]|
|Q8IVF2 1xPhospho [S1253]; 1xPhospho [S1748]|
|A0A1B0GX95 2xPhospho [S24; S26]|

因此,原来的第一行被一分为二。如有任何帮助,我们将不胜感激,如果需要进一步澄清,请告知(我对stackoverflow还是个新手(。

我们可以将separate_rows与正则表达式环视一起使用,即在;处拆分,然后是一个空格((,该空格在右括号(](之后,在大写字母之前

library(tidyr)
separate_rows(df1, NEW.ID, sep = "(?<=\]); (?=[A-Z])")

-输出

# A tibble: 5 × 1
NEW.ID                                     
<chr>                                      
1 P02538 [551-559]                           
2 P04259 [551-559]                           
3 A0A0B4J2F2 1xPhospho [T473]                
4 Q8IVF2 1xPhospho [S1253]; 1xPhospho [S1748]
5 A0A1B0GX95 2xPhospho [S24; S26]          

数据

df1 <- structure(list(NEW.ID = c("P02538 [551-559]; P04259 [551-559]", 
"A0A0B4J2F2 1xPhospho [T473]", "Q8IVF2 1xPhospho [S1253]; 1xPhospho [S1748]", 
"A0A1B0GX95 2xPhospho [S24; S26]")), class = "data.frame", 
row.names = c(NA, 
-4L))

最新更新