[英]Append list elements to data frame column
我有這個數據框:
GO.ID Annotated Significant Expected P-value Term Ontology
1 GO:0000049 7 0 0.25 1.0000 tRNA binding MF
2 GO:0000062 4 0 0.14 1.0000 fatty-acyl-CoA binding MF
我有這個清單:
$`GO:0000049`
[1] "Solyc02g090860.2" "Solyc03g119280.2" "Solyc05g056260.2" "Solyc06g048610.2" "Solyc07g008950.2" "Solyc08g015960.2"
[7] "Solyc10g007060.2"
$`GO:0000062`
[1] "Solyc01g099350.2" "Solyc03g082910.2" "Solyc04g078090.2" "Solyc08g075690.2"
有什么方法可以將列表的元素打印到數據框的新列中? 兩種結構的順序相同,我的意思是,GO.ID列作為列表元素進行排序。 我在尋找粘貼bash命令之類的東西。
我嘗試過lapply
並將列表導出到文件中。 然后使用write.table
,然后將命令paste
到bash中。 但是我想知道是否有一種方法可以在R中完成這種工作。
是的,我是R world的新手。
編輯:
這是我想要的輸出:
GO.ID Annotated Significant Expected P-value Term Ontology Gene_ID
1 GO:0000049 7 0 0.25 1.0000 tRNA binding MF Solyc02g090860.2,Solyc03g119280.2,Solyc05g056260.2,Solyc06g048610.2,Solyc07g008950.2,Solyc08g015960.2,Solyc10g007060.2
2 GO:0000062 4 0 0.14 1.0000 fatty-acyl-CoA binding MF Solyc01g099350.2,Solyc03g082910.2,Solyc04g078090.2,Solyc08g075690.2
如果df
是你的data.frame和lst
您的列表,你可以這樣做:
transform(df, Gene_ID=sapply(lst, paste0, collapse=',')[GO.ID])
(我很抱歉在這里使用dplyr
。所有這些操作都可以使用內置的R函數完成,但我不記得上次使用它們了)
library(dplyr)
library(tidyr)
# sample data
l <- list("GO.0000049" = c(1,2,3), "GO:0000062" = c(4,5,6))
df <- data.frame(GO.ID = c("GO.0000049", "GO:0000062"), Annotated = c(7,4), stringsAsFactors = F)
# actual magic
result <- gather(as_data_frame(lapply(l, function(x) paste(x, collapse=","))), "GO.ID", "Gene_ID") %>% inner_join(df)
您的result
將是:
Source: local data frame [2 x 3]
GO.ID Gene_ID Annotated
1 GO.0000049 1,2,3 7
2 GO:0000062 4,5,6 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.