3

次のような名前付きリストがあります。

> head(pathways)
$<NA>
NULL
$`2`
[1] "hsa04610"
$`9`
[1] "hsa00232" "hsa00983" "hsa01100"
$`10`
[1] "hsa00232" "hsa00983" "hsa01100"
$<NA>
NULL
$<NA>
NULL

以前にそれを説明する。各リストの名前はID番号であり、リストの要素である文字ベクトルの各要素のエントリは別のID番号です。$<NA>でエントリを簡単に除外できますis.na()が、残りを次のように変更したいと思います。

id   another_id
2    hsa04610   
9    hsa00232   
9    hsa00983   
9    hsa01100   
10   hsa00232  
10   hsa00983
10   hsa01100


> dput(test)
structure(list(`NA` = NULL, `2` = "hsa04610", `9` = c("hsa00232", 
"hsa00983", "hsa01100"), `10` = c("hsa00232", "hsa00983", "hsa01100"
), `NA` = NULL, `NA` = NULL), .Names = c(NA, "2", "9", "10", 
NA, NA))

何か案は?

4

3 に答える 3

6

だから私はうまくいくと思われる別の答えを見つけました。

stack(pathways)

これは簡単すぎるように思えますが、まあまあです。

于 2012-06-28T13:16:52.417 に答える
2

リストがある場合l(NAを削除した後)、次のようになります。

another_id <- unlist(l)
id <- rep(names(l), unlist(lapply(l, length)))
data.frame(id, another_id, row.names=NULL)

結果が得られます。

于 2012-06-28T12:39:38.953 に答える
2
#sample data
pathways <- list(`1` = letters[1:3], `2` = LETTERS[4:5], `3` = 6:9, `4` = NULL)

#a solution
n <- vapply(pathways, length, integer(1))
id <- rep.int(names(pathways), n)
another_id <- unlist(pathways, use.names = FALSE)
data.frame(id = id, another_id = another_id)
于 2012-06-28T12:41:38.540 に答える