我正在使用dplyr
版本0.4.1,我正试图围绕列表变量。
我在包含列表变量的表格中创建新数据框(或tbl_df
或data_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??
答案 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