【问题标题】:Add gene names to dataframe, merge 2 dataframes on transcript ID column [duplicate]将基因名称添加到数据框中,在转录 ID 列上合并 2 个数据框 [重复]
【发布时间】:2017-03-20 04:19:27
【问题描述】:

我需要将包含基因名称的列添加到数据框中,其中包含有关异构体丰度的信息。我有两张桌子。

DF 1(包含整体基因 ID #s 作为行名和大约 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

我想将 DF 2 中的 External_Gene_ID 列添加到 DF 1 中适当的 Ensemble_Gene_ID 列。我知道有一种方法可以根据感兴趣的列将这两个数据框合并在一起

我希望我已经足够详细地解释了这一点。感谢您的帮助!

【问题讨论】:

  • “我知道有一种方法可以根据感兴趣的列将这两个数据框合并在一起”——这引出了一个问题——那你为什么不尝试呢?
  • 试试这个例子,我们也可以按行名合并。 df1 <- mtcars[, 1:2]; df2 <- mtcars[, 3:4]; df2$myCol <- rownames(mtcars); merge(df1, df2, by.x = "row.names", by.y = "myCol"),更多信息请参见here

标签: r bioinformatics genetics


【解决方案1】:

dplyr 的解决方案(可能)是先在DF1 中创建Ensemble_Gene_ID 列,然后基于该列使用dplyr 加入。左连接使得 DF2 中与 DF1 匹配的项目将成为新 DF 的一部分,但 DF2 独有的那些基因 ID 不会成为(即,DF1 是您关心的模板,这样输出将保持DF1 的原始 nrow)。

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 的示例块,这是否有效。

【讨论】:

  • 我认为接近这个的东西可能会起作用。但是情况很复杂,DF1 中的基因 ID 存在于没有标题文本标签的第 0 列(行名列)中。
  • 是的,我回答后看到了。我编辑了答案以在 DF1 中创建名为 Ensemble_Gene_ID 的列(sapply 语句)。希望这是在正确的道路上。也许添加一个 MWE,其中包含 DF1DF2 的一些小子集?
  • 答案的第一部分很好地将 Ensemble_Gene_ID 列添加到 DF1。但是我遇到了第二个命令的问题,我似乎无法让它工作。使用任何 dplyr *_join 命令时,我始终收到以下错误。 '错误:在 lhs 中找不到'Ensemble_Gene_ID'列,无法加入'我假设 lhs 表示左侧..?
  • 您是否运行了根据行名创建 Ensemble_Gene_ID 列的第一行?
  • 谢谢你!还必须进行另一项更改,我将记录下来以供其他找到此帖子的人使用。最终最后的第二个命令看起来像这样。 DF3 &lt;- dplyr::left_join(DF1, DF2, by=c('Ensemble_Gene_ID'='Ensemble_Gene_ID')) 这是因为我们通过匹配 DF1 和 DF2 中的 Ensemble_Gene_ID 列来加入电子表格。以 Ensemble_Gene_ID 和 External_Gene_ID 为依据,在空列中匹配结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 2017-10-31
  • 2020-09-25
相关资源
最近更新 更多