在处理数据帧时遇到一些麻烦,希望您能帮助我。
我有一个数据框(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与一个基因产品相关的信息。
这里是生成df1
和df2
的代码。
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"))
[现在,我需要将此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
我希望这会有所帮助!