Предположим, у меня есть следующее разделение:
x <- 1:5 K <- 2 y <- 5 split(sample(x), sample(1:K, y, replace = TRUE)) $`1` [1] 3 $`2` [1] 5 1 2 4
Есть ли способ поместить вышеперечисленное в форму
[, 1] [, 2] [1, ] 3 5 [2, ] 1 [3, ] 2 [4, ] 4
Можно попробовать подход, основанный на tidyverse, поскольку он обеспечит гибкость для непосредственного использования цепочки dplyr. Логика состоит в том, чтобы stack перечислить в data.frame, а затем использовать tidyr::spread для изменения данных в широком формате:
tidyverse
dplyr
stack
tidyr::spread
library(tidyverse) set.seed(1) split(sample(x), sample(1:K, y, replace = TRUE)) %>% stack() %>% group_by(ind) %>% mutate(rn = row_number()) %>% spread(ind, values, fill = NA_integer_) %>% select(-rn) %>% as.data.frame() # 1 2 # 1 1 2 # 2 NA 5 # 3 NA 4 # 4 NA 3
Вы могли бы заполнить эти пустые элементы с помощью NA, используя length<-, тогда это было бы идеально для результата из sapply.
length<-
sapply
a <- split(sample(x), sample(1:K, y, replace = TRUE)) a # $`1` # [1] 2 3 # # $`2` # [1] 5 1 4 sapply(a, "length<-", max(lengths(a))) # 1 2 # [1,] 2 5 # [2,] 3 1 # [3,] NA 4