【问题标题】:How to separate IDs into different rows using R如何使用 R 将 ID 分成不同的行
【发布时间】:2022-01-14 16:56:29
【问题描述】:

我正在使用 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 还是比较陌生)。

【问题讨论】:

  • 欢迎来到 SO!你能用dput分享你的数据框吗?
  • 抱歉,我不知道该怎么做,由于研究数据,我不愿意分享整个数据框。

标签: r string dataframe


【解决方案1】:

我们可以将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))

【讨论】:

  • 不,这不起作用,因为对于某些 ID,有一个 ;在中间,例如示例中的第 4 行(A0A1B0GX95 2xPhospho [S24; S26])
  • @Rachel 如果示例如您所示,并且预期只是拆分第一行,我的解决方案是得到预期的输出,如图所示。你能用我帖子中的数据进行测试吗
  • 哦,抱歉意识到您更新了答案,最初它只是说 sep = ";"。现在可以使用了-非常感谢!我会赞成这个答案。
  • 意识到我不能投票。我想勾选它,但它现在不允许我。稍后再试。
  • 啊,是的,现在可以了。再次感谢您。
猜你喜欢
  • 2021-08-14
  • 2022-10-18
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 2016-11-09
  • 2019-07-09
相关资源
最近更新 更多