【发布时间】:2018-09-16 07:30:36
【问题描述】:
我可以将列表列直接取消嵌套到 n 列吗?
可以假定列表是规则的,所有元素的长度相等。
如果我有一个字符向量而不是一个列表列,我可以tidyr::separate。我可以tidyr::unnest,但我们需要另一个辅助变量才能tidyr::spread。我错过了一个明显的方法吗?
示例数据:
library(tibble)
df1 <- data_frame(
gr = c('a', 'b', 'c'),
values = list(1:2, 3:4, 5:6)
)
# A tibble: 3 x 2 gr values <chr> <list> 1 a <int [2]> 2 b <int [2]> 3 c <int [2]>
目标:
df2 <- data_frame(
gr = c('a', 'b', 'c'),
V1 = c(1, 3, 5),
V2 = c(2, 4, 6)
)
# A tibble: 3 x 3 gr V1 V2 <chr> <dbl> <dbl> 1 a 1. 2. 2 b 3. 4. 3 c 5. 6.
当前方法:
unnest(df1) %>%
group_by(gr) %>%
mutate(r = paste0('V', row_number())) %>%
spread(r, values)
【问题讨论】:
-
我不知道为什么,但这行得通?
library(splitstackshape); cSplit(df1, "values", sep = ":")? -
@RonakShah 我认为 splitstackshape 在幕后做了 Victorp 的回答。