将列分成多行并填充到左侧,在 R 中
Separate column into multiple rows and fill to the left, in R
我有一长串带注释的基因。它们在 "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)
我有一长串带注释的基因。它们在 "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)