数据框内有列表。我想将列表转换为R中的单个数据帧

时间:2020-11-12 14:15:27

标签: r list dataframe

我的数据框如下:

-1, 0, 1

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


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

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

short

其中

-1, 0, 1

是带有列表的原始数据框

2 个答案:

答案 0 :(得分:4)

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

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"

如果我们要使b列每一行中的每个列表成为数据框,我们可以这样做:

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中,以避免污染全局工作空间,并使遍历数据帧的操作变得更加容易。

答案 1 :(得分:0)