首页 > 解决方案 > 数据框中有列表。我想将列表转换为 R 中的单个数据框

问题描述

我的数据框如下所示:

list1
list2
list3
.
.
.
list30

每个列表中都有矢量数据。我希望每个列表都是一个数据框。我不知道该怎么做。


编辑:@Allen Cameron 已经回答了这个问题。

要获取带有列表的数据框,数据框内的每个列表都成为数据框,请使用:

list2env(df_list, globalenv())

在哪里

df_list 

是带有列表的原始数据框

标签: rlistdataframe

解决方案


假设我们有一个这样的数据框:

df <- data.frame(a = 1:3)
df$b <- lapply(1:3, function(x) list(sample(3)))
df
#>   a       b
#> 1 1 1, 2, 3
#> 2 2 3, 1, 2
#> 3 3 2, 3, 1

在这里我们可以看到该列b是一个列表列表:

class(df$b)
#> [1] "list"

class(df$b[1])
#> [1] "list"

如果我们想在列 ba 数据框的每一行中创建每个列表,我们可以这样做:

df_list <- setNames(lapply(df$b, function(x) data.frame(var = x[[1]])), 
                    c("df1", "df2", "df3"))

这给了我们一个数据框列表,每个都有自己的名字:

df_list
#> $df1
#>   var
#> 1   1
#> 2   2
#> 3   3
#> 
#> $df2
#>   var
#> 1   3
#> 2   1
#> 3   2
#> 
#> $df3
#>   var
#> 1   2
#> 2   3
#> 3   1

如果我们愿意,我们可以像这样将它们提取到全局工作区中:

list2env(df_list, globalenv())

所以现在我们有

df1
#>   var
#> 1   2
#> 2   3
#> 3   1

df2
#>   var
#> 1   1
#> 2   2
#> 3   3

df3
#>   var
#> 1   3
#> 2   1
#> 3   2

就个人而言,对于大多数用途,我会保留数据框df_list以避免污染全局工作空间并更容易遍历数据框。


推荐阅读