パッケージabind
から関数を探しています:abind
> library(abind)
> IrisArray <- abind(split(iris[, -5], iris[,5]), along=3)
> dim(IrisArray)
[1] 50 4 3 # these are the dimensions you want.
このための関数が必要な場合は、これを見てください。
library(abind)
Splitbyfactor <- function(x, by='Species'){
ind <- which(colnames(x)==by)
abind(split(x[, -ind], x[,ind]), along=3)
}
dim(Splitbyfactor(iris, by='Species'))
[1] 50 4 3
編集
この編集はあなたのコメントに答えるためのものです。2列の乱数とIDを含む3番目の列で構成されるdata.frameがあると仮定しますdf
。これらのIDは大文字のA、B、C、D、E、Fです。これはあなたを意味します分割する5つの異なるIDがalong
ある場合、呼び出しの引数abind
を5に設定する必要はありません。これは、IDの数を参照しないため、結果の配列の次元を参照するためです;)。この例を参照してください
> df <- data.frame(A=rnorm(10), B=rnorm(10), ID=rep(LETTERS[1:5], each=6))
> dim(df)
[1] 30 3
> dim(Splitbyfactor(df, by='ID'))
[1] 6 2 5