2016-04-23 4 views
1

3次元のキーであるRの値の集合を表現したい場合、これを生成する簡単/簡潔な方法はありますか?多次元データマッピングの作成R

たとえば、次のキーがあります。各ディメンションは、異なる数のキーを持つことをサポートする必要があります。だから、私は、アクセスできるようにする、例えば、AAの評価、7年後の有する値は、出発

rating <- c('AA','AAB','C') 
timeInYears <- 1:30 
monthsUntilStart <- c(1,3,6,12) 

:合計で以下の例では、360個の値(3 * 30 * 4)を参照します

value <- data[rating=='AA',timeInYears==7,monthsUntilStart==12] 

私はどのようなキーの組み合わせでもサンプル生成値を提供したいと考えています。

実際にはデータベースから読み込まれますが、ダミー値のセットからダミー構造を提供するとよいでしょう。ダミー値は単純に構造全体にわたって繰り返すことができます。

だから我々は、これらの値のいずれかに

values <- c(2.30,2.32,1.98,2.18,2.29,2.22) 

したがって、各(x、y、z)のキーマップを持っていると言います。

これに最も近づくためのヒントやヒントをご紹介します。

ありがとうございます!

フィル。

+0

あなたの例では、360値(3 * 30 * 4)を満たすのに十分な値を指定していないことに注意してください。私は以下の回答にランダムな値を割り当てます。 – hatmatrix

+0

はい、これは問題ありません - ありがとう!理想的な世界では私が与えた値を循環させるだろうが、ランダムな値を使うことは今のところ十分である。 – Phil

+0

よろしくお願いします。また、データフレーム(* edit *セクションを追加)を使い続ける場合は、 'subset'を使用することもできます。 – hatmatrix

答えて

3

このタスクでは、Rで配列を使用できます。

まず、すべての可能性を含むデータフレームを作成します。所望に応じて、我々は、観測の長さに繰り返される値を代入します:

rating <- c('AA','AAB','C') 
timeInYears <- 1:30 
monthsUntilStart <- c(1,3,6,12) 

data <- expand.grid(rating=rating, timeInYears=timeInYears, monthsUntilStart=monthsUntilStart) 
data$value <- c(2.30,2.32,1.98,2.18,2.29,2.22) # cycles through 

次に、我々は、アレイに変換:整数文字列に変換され

dataarray <- unclass(by(data[["value"]], data[c("rating", "timeInYears", "monthsUntilStart")], identity)) 

注意。

> dimnames(dataarray) 
$rating 
[1] "AA" "AAB" "C" 

$timeInYears 
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" 
[16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" 

$monthsUntilStart 
[1] "1" "3" "6" "12" 

インデックスで目的の要素にアクセスできます(この例ではランダム値が返されます)。

> dataarray["AA", "7", "12"] 
[1] 2.3 

編集

ご希望の場合は、また、単に、データフレーム自体を使用することができます。

> subset(data, rating=='AA' & timeInYears==7 & monthsUntilStart==12) 

    rating timeInYears monthsUntilStart value 
289  AA   7    12 2.3 
> subset(data, rating=='AA' & timeInYears==7 & monthsUntilStart==12, value) 

    value 
289 2.3 
> subset(data, rating=='AA' & timeInYears==7 & monthsUntilStart==12)$value 
[1] 2.3