从数据帧中提取两列并将它们与第二个数据帧合并

问题描述 投票:0回答:1

在处理数据帧时遇到一些麻烦,希望您能帮助我。

我有一个数据框(df1,请参见图1),从那开始,我需要从最后一列(注释)中提取de ID,这可以在下一行中完成

genes <- sapply(df1$Comment, function(x){
  paste(substring(x, as.numeric(gregexpr("SL1344_RS", x)[[1]]), 
                  as.numeric(gregexpr("SL1344_RS", x)[[1]]) + 13), collapse=";")
  })

[现在,我需要将此ID与相应的频率值合并到“ freq”列下,所以我最后得到两列,其中一列具有ID,下一列具有其频率值。

最后,我需要用其蛋白质名称更改ID,此信息位于df2(参见图片)中,您可以在“产品”列下看到每个ID与一个基因产品相关的信息。

这里是生成df1df2的代码。

df1 <- data.frame(
  gene = c("SL1344_RS000040", "SL1344_RS000095", "SL1344_RS000105"),
  freq = c(7, 21 , 51))

df2 <- data.frame(
  code = c("SL1344_RS000095", "SL1344_RS000040", "SL1344_RS000105"),
  product = c("Product C", "Product A", "Product B"))
r database
1个回答
1
投票

[现在,我需要将此ID与相应的频率值合并到“ freq”列下,所以我最后得到两列,其中一列具有ID,下一列具有其频率值。

您可以简单地做到这一点

genes.freq <- cbind(genes, df1$freq)

最后,我需要用其蛋白质名称更改ID,此信息位于df2(参见图片)中,您可以在“产品”列下看到每个ID与一个基因产品有关。

这只是在df2中的搜索,您要在其中获取匹配项的索引。

names <- df2$Product[ match(genes.freq$gene, df2$Code) ]

genes.freq.names <- cbind(
    genes.freq, names)

这是一个简单的玩具示例

df1 <- data.frame(
  gene = c("SL1344_RS000040", "SL1344_RS000095", "SL1344_RS000105"),
  freq = c(7, 21 , 51))

df2 <- data.frame(
  code = c("SL1344_RS000095", "SL1344_RS000040", "SL1344_RS000105"),
  product = c("Product C", "Product A", "Product B"))

df1$Product.Names <- df2$product[ match(df1$gene, df2$code) ]

df1

我希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.