0

私は次のようなリストを持っています

$`1`
[1] 1959   13

$`2`
[1] 2280  178   13

$`3`
[1] 2612  178   13

$`4`
[1] 2902  178   13

そして、構造は次のようなものです:

structure(list(`1` = c(1959, 13), `2` = c(2280, 178, 13), `3` = c(2612, 
178, 13), `4` = c(2902, 178, 13)......,.Names = c("1", "2", "3", "4"....)

このリスト内のリストを結合して、次のようなリストを作成するにはどうすればよいですか。

$`list`
[1] 1959   13
[2] 2280  178   13
[3] 2612  178   13
[4] 2902  178   13
4

2 に答える 2

4

これは、マトリックスとして求めているものに最も近いものです。

LIST <- structure(list(`1` = c(1959, 13), `2` = c(2280, 178, 13), `3` = c(2612, 
178, 13), `4` = c(2902, 178, 13)))

cbind.fill <-
function(...) {
    nm <- list(...)
    nm<-lapply(nm, as.matrix)
    n <- max(sapply(nm, nrow))
    do.call(cbind, lapply(nm, function(x) rbind(x, 
        matrix(, n - nrow(x), ncol(x)))))
}

t(do.call('cbind.fill', LIST))
print(X$list, na.print="", quote=FALSE)

または使用plyr

LIST <- lapply(LIST, function(x) data.frame(t(x)))
library(plyr)
rbind.fill(LIST)

たぶんあなたはただ名前が欲しくないのですか?

もしそうなら...

names(LIST) <- NULL
LIST

私はあなたが求めている出力構造を取得できないと思います。

于 2012-07-30T18:31:54.213 に答える
0

次のコードを試してください。問題は、出力として何を望んでいるのかよくわからないことです。リストと呼んでいますが、マトリックスに非常によく似ています。マトリックスとしてそれが必要であると仮定すると、次のようにする必要があります。

x <- list()
x$`1` <- c(1959, 13)
x$`2` <- c(2280, 178, 13)
x$`3` <- c(2612, 178, 13)
x$`4` <- c(2902, 178, 13)

# maximum number of elements in any vector
max <- max(sapply(x, function(y) length(y)))

# make all vectors the same length
x <- lapply(x, function (y){length(y) <- max; y})

# combine them in a matrix
result <- do.call(rbind, x)

結果:

> result
  [,1] [,2] [,3]
1 1959   13   NA
2 2280  178   13
3 2612  178   13
4 2902  178   13

この行列出力は、リストの要素としていつでも保存できます。ここから長さを等しくするというアイデアが浮かびました。

マトリックスを数値にしたい場合、NA を取り除くことはできません (いつでも文字に変換して NA を "" にすることができますが、マトリックスをさらに操作するのはおそらく良い考えではありません)。 .

私が混乱していて、結局のところリストが必要なのかもしれませんが、ジョシュがコメントで述べたように、その場合、データは最初から正しいです。

于 2012-07-30T18:34:27.360 に答える