数据集中的列表不完整

hyc*_*yco 6 r list dataframe

这是一个小清单:

foo <- list(c("johnny", "joey"), character(0), "deedee")

[[1]]
[1] "johnny" "joey"  

[[2]]
character(0)

[[3]]
[1] "deedee"
Run Code Online (Sandbox Code Playgroud)

如何将其转换为此数据框?

  list_item   name
1         1 johnny
2         1   joey
3         3 deedee
Run Code Online (Sandbox Code Playgroud)

我见过的所有列表到数据帧的解决方案都不起作用,因为我的列表不完整.

tal*_*lat 7

melt包的功能reshape2也在列表上工作.所以你可以使用:

library(reshape2)
melt(foo)
#   value L1
#1 johnny  1
#2   joey  1
#3 deedee  3
Run Code Online (Sandbox Code Playgroud)

我相信你知道如何改变名字.


jba*_*ums 5

这是基础R的一种方式:

data.frame(list_item=rep(seq_along(foo), sapply(foo, length)), 
           name=unlist(foo))


##   list_item   name
## 1         1 johnny
## 2         1   joey
## 3         3 deedee
Run Code Online (Sandbox Code Playgroud)

正如@RichardScriven在评论中所提到的,sapply(foo, length)可以替换为lengths(foo).


akr*_*run 3

我们可以在将 'foo'设置为 'foo' 序列后使用stackfrom 。base Rnames

stack(setNames(foo, seq_along(foo))) 
#    values ind
#1 johnny   1
#2   joey   1
#3 deedee   3
Run Code Online (Sandbox Code Playgroud)