2

以下に示すように、さまざまな長さの単純なリストをデータ フレームに変換しようとしています。欠損値に NaN を入力したいと思います。ldply、rbind、as.data.frame() を使用してみましたが、必要な形式にすることができませんでした。助けてください。

x=c(1,2)
y=c(1,2,3)
z=c(1,2,3,4)
a=list(x,y,z)

a
[[1]]
[1] 1 2

[[2]]
[1] 1 2 3

[[3]]
[1] 1 2 3 4

出力は次のようになります。

x   y   z
1   1   1
2   2   2
NaN 3   3
NaN NaN 4
4

2 に答える 2

2

from "plyr"を使用rbind.fill.matrixすると、探しているものに非常に近くなります。

> library(plyr)
> t(rbind.fill.matrix(lapply(a, t)))
  [,1] [,2] [,3]
1    1    1    1
2    2    2    2
3   NA    3    3
4   NA   NA    4
于 2013-07-30T16:11:21.160 に答える
2

これは大量のコードであるため、Ananda のソリューションほどクリーンではありませんが、すべてベース R です。

maxl <- max(sapply(a,length))
out <- do.call(cbind, lapply(a,function(x) x[1:maxl]))
# out <- matrix(unlist(lapply(a,function(x) x[1:maxl])), nrow=maxl) #another way
out <- as.data.frame(out)
#names(out) <- names(a)

結果:

> out
  V1 V2 V3
1  1  1  1
2  2  2  2
3 NA  3  3
4 NA NA  4

a注: 結果の df の名前は、現在名前を持たないリスト ( ) の名前に依存します。

于 2013-07-30T16:21:36.647 に答える