【问题标题】:Cancatenate many list where elements have the same length连接一个列表,其中元素具有相同的长度
【发布时间】:2019-01-11 21:19:28
【问题描述】:

假设我有三个列表:

List1 <- list(c(1,2,3),c('A','B','C','D'),c(0,2))
List2 <- list(c(5,6,7),c('AA','BB','CC','DD'),c(1,5))
List3 <- list(c(1,1,1),c('F','G','H','E'),c(0,6))

所需的结果应该是一个列表:

List
[[1]]
1 5 1
2 6 1
3 7 1

[[2]]
'A' 'AA' 'F'
'B' 'BB' 'G'
'C' 'CC' 'H'
'D' 'DD' 'E'

[[3]]
0 2
1 5
0 6

我尝试使用 cbind(List1,List2,List3),但它没有给出所需的结果。

我该如何解决?

【问题讨论】:

  • 我认为根据显示的模式,预期中的最后一个列表元素应该是您显示的内容的转置

标签: r


【解决方案1】:

你可以这样做:

mapply(cbind, List1, List2, List3)

[[1]]
     [,1] [,2] [,3]
[1,]    1    5    1
[2,]    2    6    1
[3,]    3    7    1

[[2]]
     [,1] [,2] [,3]
[1,] "A"  "AA" "F" 
[2,] "B"  "BB" "G" 
[3,] "C"  "CC" "H" 
[4,] "D"  "DD" "E" 

[[3]]
     [,1] [,2] [,3]
[1,]    0    1    0
[2,]    2    5    6

【讨论】:

  • 如果list元素很多,可以do.call(mapply, c(FUN = cbind, mget(paste0("List", 1:3))))
【解决方案2】:

我们可以将命名为List 的对象后跟listtranspose(来自purrr)中的数字并将其转换为tibbledata.frame

library(tidyverse)
mget(paste0("List", 1:3)) %>% 
     transpose %>% 
     map(as_tibble)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2019-07-30
    • 1970-01-01
    • 2018-08-09
    • 2015-07-15
    • 2018-02-05
    • 1970-01-01
    相关资源
    最近更新 更多