将列分隔成多行,并填充到R中的左侧

  • 本文关键字:填充 分隔 r dplyr tidyr
  • 更新时间 :
  • 英文 :


我有一个很长的注释基因列表。它们以不同的级别"A"、"B"、"C"等进行注释。每个级别都有不同的名称,在某些情况下还有不同的格式。我想保持每个级别的名称不变。在R中,文本文档被导入为1列,我想将A、B、C和d行分隔成列。行按顺序排列,这意味着"B Level2"列在应用程序A Level1类别之后,高于"C Level3"类别。"#"从下一个A级类别中分离出D级。因此,在每个"#"之后,我想将A、B、C和d行分隔成单独的列。然后用上面的级别类别名称填充左边的列。举个例子df:

df <- data.frame(x = c("A<b>Level1</b>", "B", "B  <b>Level2</b>", "C    02000 Level3 [BR:ko02000]", "C    02010 Level3 [PATH:ko02010]", "D      Level4; K15551  tauA; taurine transport system substrate-binding protein", "D      Level4; K15551  tauA; taurine transport system substrate-binding protein", "D      Level4; K15551  tauA; taurine transport system substrate-binding protein"))

输出需要如下所示:

A   B   C   D
A<b>Level1</b>  B  <b>Level2</b>    C    02000 Level3 [BR:ko02000]  NA
A<b>Level1</b>  B  <b>Level2</b>    C    02010 Level3 [PATH:ko02010]    D      Level4; K15551  tauA; taurine transport system substrate-binding protein
A<b>Level1</b>  B  <b>Level2</b>    C    02010 Level3 [PATH:ko02010]    D      Level4; K15551  tauA; taurine transport system substrate-binding protein
A<b>Level1</b>  B  <b>Level2</b>    C    02010 Level3 [PATH:ko02010]    D      Level4; K15551  tauA; taurine transport system substrate-binding protein

到目前为止,我正在尝试dplyr和tidyr来分离输入df(),但我似乎无法使其工作。建议??想法??

我建议使用使用split:创建的数据帧列表

split(df, substr(df$x, 1, 1))

如果你真的必须拥有你的展示方式:

library(dplyr)
library(tidyr)
df %>% group_by(id = substr(x, 1, 1)) %>%
       mutate(row = row_number()) %>%
       spread(id, x) %>%
       fill(-row)

最新更新