Изменение формата вывода split () в R - PullRequest
0 голосов
/ 23 июня 2018

Предположим, у меня есть следующее разделение:

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

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Можно попробовать подход, основанный на tidyverse, поскольку он обеспечит гибкость для непосредственного использования цепочки dplyr. Логика состоит в том, чтобы stack перечислить в data.frame, а затем использовать 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
0 голосов
/ 23 июня 2018

Вы могли бы заполнить эти пустые элементы с помощью NA, используя 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
...