r - 将列分成多行并向左填充,在 R 中

标签 r dplyr tidyr

我有一个很长的注释基因列表。它们在不同的级别“A”、“B”、“C”等进行注释。每个级别都有不同的名称,在某些情况下还有不同的格式。我想保持每个级别的名称完好无损。在 R 中,文本文档作为 1 列导入,我想将 A、B、C 和 D 行分成几列。行按顺序排列,表示“B Level2”列在申请A Level1类别之后,“C Level3”类别之上。 “#”分隔D级,与下一个A级类别。
所以,在每个“#”之后,我想将 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)

关于r - 将列分成多行并向左填充,在 R 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34319669/

相关文章:

r - 具有逻辑值矩阵的子集数据框

r - do.call ("rbind", list(data, frames)) 但也按其原始数据框索引每一行

r - 带有 S4 对象槽的 tbl_df

r - 预测每小时时间序列的模型

r - for if else 循环 - 根据来自不同数据帧的匹配列填充列中的值

r - R : access known object within function at time of function error 中的错误处理

r - 使用 tidyeval tidyr 排除而不是包含收集变量

r - 为值的子集创建游程 ID

r - 如何在单列(长)中制作具有多个嵌套组类别的数据

r - tibble::add_row 到嵌套 tibble 在 tidyr 1.0.0 下抛出错误