我有一个看起来像这样的命名列表:
> 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))
有什么想法吗?
答案 0 :(得分:6)
所以我找到了另一个似乎有用的答案。
stack(pathways)
这似乎太容易了,但是哦。
答案 1 :(得分:2)
因此,如果你有列表l
(删除NA后),那么:
another_id <- unlist(l)
id <- rep(names(l), unlist(lapply(l, length)))
data.frame(id, another_id, row.names=NULL)
会给出结果。
答案 2 :(得分: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)