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

时间:2015-01-28 22:54:53

标签: r dplyr

我正在使用dplyr版本0.4.1,我正试图围绕列表变量。

我在包含列表变量的表格中创建新数据框(或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的所有值都是相同的长度或维度,是否有一个操作我可以运行以从表中的列表变量创建一个看起来像rbind(x, y)的表?

我希望得到一些看起来像的东西:

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?? 

1 个答案:

答案 0 :(得分:2)

您可以先在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

另一种方法是在tbl_dt之后使用rbindlist(),这也可以输入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