代码之家  ›  专栏  ›  技术社区  ›  compbiostats

更改r中split()的输出格式

  •  2
  • compbiostats  · 技术社区  · 7 年前

    假设我有以下分割:

    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 回复  |  直到 7 年前
        1
  •  5
  •   Rich Scriven    7 年前

    你可以用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
    
        2
  •  0
  •   MKR    7 年前

    你可以试试 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