2017-12-27 38 views
0

私はdata.frameを持っています。これは2つの列で構成され、数値行列のrow.namescolnamesに対応しています。例えば:row.namesとcolnamesのリストの行列要素の参照

myDF <- data.frame(curr1 = sample(row.names(euro.cross), 5), 
        curr2 = sample(colnames(euro.cross), 5)) 

IはmyDF$curr1myDF$curr2の値に対応euro.crossの要素を含むベクター、nrow(myDF)と同じ長さを返すようにしようとしています。これは1つの要素にとっては些細なことです。たとえば、の最初の行は、値euro.cross[myDF$curr1[1], myDF$curr2[1]]に対応しています。ただし、角括弧にベクトルを渡すと、行列が返されます(euro.cross[myDF$curr1, myDF$curr2]は、ベクトルlength(myDF$curr1)の代わりに行列を返します)。

がどのように私は私のような何かを行うことができるように、この操作ベクトル化しない:明らか

myDF$rate <- euro.cross[myDF$curr1, myDF$curr2] 

を、私はループを実行することができ、私はそれをコーディングするために、よりエレガントな方法を探しています。これまでのところ関数を利用して成功していませんでした。

ありがとうございます!

答えて

2

あなたは行列にmyDFを変換し、直接文字行列経由インデックスをトリガーeuro.crossから要素を抽出するためにそれを使用することができます(詳しくは?'['行列と配列セクションを参照)、何が必要ありません:

euro.cross[as.matrix(myDF)] 
# [1] 1.204921087 18.305448539 0.003070713 0.010992059 0.057234508 
関連する問題