2

これは私にとってシンプルでありながらばかばかしいほど骨の折れるプロセスです。データから行列のセットを作成する方法を理解しようとしています。

Rをお持ちの場合、

行う

data(iris)
dim(iris)

[1] 150   5

次元です

アイリスはRプログラミングで与えられたデータです

あなたがするとき

iris(3)
dim(iris3)

[1] 50  4  3

「種」に依存する列に分割された3つの行列のセットを取得します

他のデータセットに対してこれを実行できるように、どのようにプログラム/コーディングしますか?

お時間をいただき、ありがとうございました。

4

1 に答える 1

3

パッケージ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
于 2013-03-25T14:47:18.177 に答える