我有一個嵌套串列,每個子串列中有多個基因名稱:
genes = list(c("her15.1", "her15.2", "her4.2", "her4.1", "dla"), c("pdyn", "cbln1", "kctd4", "sox1b" ), c("prph","phox2a", "phox2bb", "tac1", "slc18a3a"))
genes <- setNames(genes, c("a", "b", "c"))
我也有一個像這樣的df:
V1 V2
8694 ENSDARG00000008131 sox1b
8855 ENSDARG00000010791 dla
9408 ENSDARG00000068691 kctd4
14309 ENSDARG00000091029 phox2bb
15322 ENSDARG00000006356 slc18a3a
16000 ENSDARG00000057296 cbln1
17897 ENSDARG00000014490 tac1
19208 ENSDARG00000007406 phox2a
19593 ENSDARG00000056732 her4.1
19594 ENSDARG00000094426 her4.2
19975 ENSDARG00000087798 pdyn
22102 ENSDARG00000028306 prph
22717 ENSDARG00000054560 her15.1
串列中的每個專案也在 df$V2 中。我想根據 df$V2 中的匹配將串列串列中的每個專案替換為 df$V1 中的相應專案。
謝謝!
uj5u.com熱心網友回復:
我會創建一個帶有V1值和V2名稱的翻譯向量,并在里面使用它lapply:
names.trans <- setNames(df$V1, df$V2)
lapply(genes, function(g) unname(names.trans[g]))
# $a
# [1] "ENSDARG00000054560" NA "ENSDARG00000094426"
# [4] "ENSDARG00000056732" "ENSDARG00000010791"
#
# $b
# [1] "ENSDARG00000087798" "ENSDARG00000057296" "ENSDARG00000068691"
# [4] "ENSDARG00000008131"
#
# $c
# [1] "ENSDARG00000028306" "ENSDARG00000007406" "ENSDARG00000091029"
# [4] "ENSDARG00000014490" "ENSDARG00000006356"
或者,您可以使用match(具有相同的結果):
lapply(genes, function(g) df$V1[match(g, df$V2)])
uj5u.com熱心網友回復:
像這樣的東西可能對你有用
sapply(genes, function(x) df$V1[grep(paste(x, collapse="|"), df$V2)])
$a
[1] "ENSDARG00000010791" "ENSDARG00000056732" "ENSDARG00000094426"
[4] "ENSDARG00000054560"
$b
[1] "ENSDARG00000008131" "ENSDARG00000068691" "ENSDARG00000057296"
[4] "ENSDARG00000087798"
$c
[1] "ENSDARG00000091029" "ENSDARG00000006356" "ENSDARG00000014490"
[4] "ENSDARG00000007406" "ENSDARG00000028306"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525641.html
標籤:r列表数据框字典映射
下一篇:使用函式將錯誤陳述句寫入字典
