2016-11-06 8 views
0

Мне нужно добавить столбец, содержащий имена генов, в dataframe с информацией об изометрии изоформы. У меня две таблицы.Добавить имена генов в dataframe, объединить 2 dataframes в столбце идентификатора транскрипции

DF 1 (содержит ансамбль #s ген идентификатора, в качестве значений rownames и численности asorted изоформ в около 15 дополнительных столбцов)

       event_name    sample1_posterior_mean       
gene:ENSMUSG00000079523  0.93,0.02,0.00,0.06  0.90,0.01,0.00,0.04 
gene:ENSMUSG00000078572  0.78     0.67 
gene:ENSMUSG00000022548  0.63     0.25 

DF 2 (содержит 3 колонки ансамбль гена ID #S и имена генов)

  Ensemble_Transcript_ID Ensemble_Gene_ID  External_Gene_ID 
2335  ENSMUST00000101973  ENSMUSG00000096659   Gm25679 
2336  ENSMUST00000179019  ENSMUSG00000095915   n-R5s115 
2337  ENSMUST00000183908  ENSMUSG00000099299   Gm27722 
2338  ENSMUST00000044752  ENSMUSG00000039481    Nrtn 
2339  ENSMUST00000179157  ENSMUSG00000095476   Gm25077 

Я хотел бы добавить столбец External_Gene_ID из DF 2 в соответствующей колонке Ensemble_Gene_ID в DF 1. Я знаю, что есть способ объединить эти два данных кадра вместе, основываясь на колонке интереса

Надеюсь, я объяснил это достаточно подробно. Спасибо за помощь!

+1

«Я знаю, что есть способ объединить эти два кадра данных вместе на основе интересующей колонки» - это задает вопрос - почему вы не попробовали это? – SymbolixAU

+0

Попробуйте этот пример, мы также можем объединиться по именам ростов. 'df1 <- mtcars [, 1: 2]; df2 <- mtcars [, 3: 4]; df2 $ myCol <- rownames (mtcars); merge (df1, df2, by.x = "row.names", by.y = "myCol") ', см. [здесь] (http://stackoverflow.com/questions/7739578/merge-data-frames-based -on-rownames-in-r) для получения дополнительной информации. – zx8754

ответ

0

dplyr решение (возможно), чтобы сначала создать Ensemble_Gene_ID колонку в DF1, а затем использовать dplyr присоединиться на основе этого столбца. Левое соединение таково, что элементы из DF2, которые соответствуют DF1, станут частью нового DF, но эти идентификаторы генов, уникальные для DF2, не будут (т. Е. DF1 является своего рода шаблоном, который вам интересен, так что результат будет поддерживать оригинальное название DF1).

DF1$Ensemble_Gene_ID <- sapply(rownames(DF1), 
          function(x){unlist(strsplit(x,':'))[2]})}) 

DF3 <- dplyr::left_join(DF1, DF2, by=c('Ensemble_Gene_ID'='External_Gene_ID')) 

но я не уверен, что это работает без примера куска каждого data.frame.

+0

Я думаю, что что-то близко к этому, скорее всего, сработает. Но ситуация осложняется тем, что идентификаторы генов в DF1 существуют в столбце 0 (столбец имен розеток), который не имеет метки заголовка. – Paul

+0

Да, я видел это после того, как я ответил. Я отредактировал свой ответ, чтобы создать столбец с именем 'Ensemble_Gene_ID' в DF1 (оператор' sapply'). Надеюсь, это на правильном пути. Возможно, добавьте MWE, содержащий небольшое подмножество 'DF1' и' DF2'? –

+0

Первая часть вашего ответа сработала, чтобы добавить столбец Ensemble_Gene_ID в DF1. Однако я столкнулся с проблемами со второй командой, и я не могу заставить ее работать. Я последовательно получаю следующую ошибку, используя любую команду dplyr * _join. «Ошибка: столбец« Ensemble_Gene_ID »не найден в lhs, не может присоединиться« Я предполагаю, что lhs означает «Левая сторона».? – Paul