我正在使用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))