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 回答