5

非対称リストがあります。つまり、各サブリストの要素数が異なります。リストをマトリックスに変換するにはどうすればよいですか?

以下では、対称リストから始めて、2つの異なる方法で行列に変換します。

# create a symmetric list

my.list1    <- list(c(1,2,3,4),c(5,6,7,8),c(9,10,11,12))
my.list1

# convert symmetric list to a matrix

mat.a1  <- matrix( unlist(my.list1), nrow=length(my.list1), byrow=T )
mat.a1

# alternative method to convert symmetric list to a matrix

mat.b1 <- do.call(rbind, my.list1)
mat.b1

次に、非対称リストを作成します。

# create an asymmetric list

my.list2   <- list(c(1,2,3,4),c(5,6,7,8,9),c(10,11,12,13))
my.list2

必要なマトリックスは次のとおりです。

# desired result

#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    2    3    4   NA
# [2,]    5    6    7    8    9
# [3,]   10   11   12   13   NA
4

1 に答える 1

8

まず、リスト内の各ベクトルをNAで拡張して、同じ長さのベクトルを取得します。次に、マトリックスを作成します。例えば:

max.len <- max(sapply(my.list2, length))
corrected.list <- lapply(my.list2, function(x) {c(x, rep(NA, max.len - length(x)))})
mat <- do.call(rbind, corrected.list)
于 2012-06-22T00:11:09.870 に答える