将列表更改为数据框但保留列表顺序的数量

时间:2014-05-02 17:14:45

标签: r

我有一个list,其中length为14.在每一行中,其中一些是NULL值,其中一些有多个数字。这是清单:

> start_positions
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
[1] 1517

[[5]]
NULL

[[6]]
NULL

[[7]]
NULL

[[8]]
NULL

[[9]]
[1] 1410

[[10]]
[1] 5995

[[11]]
NULL

[[12]]
[1] 13880 24631

[[13]]
NULL

[[14]]
[1] 18622

我想取消列表并删除这些NULL值,但请保留list的订单号,如下所示:

list    start_positions
4       1517
9       1410
10      5995
12      13880
12      24631
14      18622

我用rbind()尝试了do.call()unlist(),但它只给了我一列,并从1开始排名。(我想我应该列出每一行?但是我不知道怎么做。)

1 个答案:

答案 0 :(得分:1)

由于NULL值,您会收到警告,但您可以使用stack

myList <- list(NULL, NULL, 1, 2, NULL, c(3, 4)) ## Sample data
stack(setNames(myList, seq_along(myList)))
#   values ind
# 1      1   3
# 2      2   4
# 3      3   6
# 4      4   6
# Warning message:
# In stack.default(setNames(myList, seq_along(myList))) :
#   non-vector elements will be ignored

如果您想避免警告,可以在命名之后将列表分组:

names(myList) <- seq_along(myList)
stack(myList[!sapply(myList, is.null)])

请注意,在任何情况下stack都需要names。在第一个示例中,我使用setNames“动态”添加了它们,在第二个示例中,我直接添加了它们。