2015-12-16 4 views
3

У меня очень длинный список аннотированных генов. Они аннотируются на разных уровнях «A», «B», «C» и т. Д. Каждый уровень имеет другое имя, а в некоторых случаях - другой формат. Я хотел бы сохранить имена каждого уровня неповрежденными. В R текстовый документ импортируется как 1 столбец, и я хотел бы разделить строки A, B, C и D на столбцы. Строки упорядочены, что означает, что «B Level2» указан после приложения A Категория Level1 и выше категории «C Level3». «#» отдельный уровень D, из следующей категории «levell». SO, после каждого «#» я хотел бы разделить строки A, B, C и D на отдельные столбцы. Затем введите столбец влево с указанным выше именем категории уровней. Учитывая этот пример ДФ:Разделите столбец на несколько строк и заполните слева, в R

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 для разделения() входной Д.Ф., но я могу Кажется, он работает. Предложения ?? мысли ??

ответ

2

Я предложил бы использовать список фреймов данных, созданных с использованием 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) 
+0

Когда я использую второе решение здесь , Я получаю это сообщение об ошибке: «Ошибка в setNames (as.list (seq_along (vars)), vars): объект« A »не найден» – shu251

+0

Он должен работать, но см. Редактирование для более общей версии – jeremycg

+0

Спасибо! очень полезно – shu251

Смежные вопросы