将列表变量绑定到新数据框中

Binding a list variable into a new data frame

我正在使用 dplyr 版本 0.4.1,并且正在尝试围绕列表变量进行思考。

我无法从包含列表变量的 table 创建新数据框(或 tbl_dfdata_frame 或其他)。

例如,如果我有一个像这样的 tbl_df

x <- c(1,2,3)
y <- c(3,2,1)
d <- data_frame(X = list(x, y))

d
## Source: local data frame [2 x 1]
##
##         X
## 1 <dbl[3]>
## 2 <dbl[3]>

假设列表变量 X 的所有值都是相同的长度或维度,是否有一个操作可以 运行 创建一个看起来像 [=19] 的 table =] 来自 table?

中的列表变量

我希望得到看起来像这样的东西:

data_frame(V1 = c(1, 3), V2 = c(2, 2), V3 = c(3, 1))
## Source: local data frame [2 x 3]
##
##   V1 V2 V3
## 1  1  2  3
## 2  3  2  1

最接近我想要的结果的是堆积柱:

d %>% tidyr::unnest(X)

我认为也许使用 rowwise 按行分组可能允许我对每一行进行操作,但我看到的结果与上面相同。

d %>% rowwise %>% tidyr::unnest(X) # %>% some extra commands here?? 

您可以先在 d 上做一些工作,然后再使用 bind_rows()

library(dplyr)
d$X %>% 
    lapply(function(x) data.frame(matrix(x, 1))) %>%
    bind_rows
# Source: local data frame [2 x 3]
#
#   X1 X2 X3
# 1  1  2  3
# 2  3  2  1

另一种方法是在rbindlist()之后使用tbl_dt,也可以输入dplyr函数

library(data.table)
tbl_dt(rbindlist(lapply(d$X, as.list)))
# Source: local data table [2 x 3]
#
#   V1 V2 V3
# 1  1  2  3
# 2  3  2  1