3

現在、R には 2 つのデータ フレームがあり、次のようなデータが含まれています。

> data
  p a         i
1 1 1 2.2561469
2 5 2 0.2316390
3 2 3 0.4867456
4 3 1 0.1511705
5 4 2 0.8838884

そして 1 つには、次のような係数が含まれています。

> coef
         3        2        1
1 29420.50 31029.75 29941.96
2 26915.00 27881.00 27050.00
3 27756.00 28904.00 28699.40
4 28345.33 29802.33 28377.56
5 28217.00 29409.00 28738.67

これらのデータ フレームは、data$a の各値が coef の列名に対応し、data$p が coef の行名に対応するため、接続されます。

これらの係数を適用して、coef の行名と列名を data$a と data$p に一致させて、これらの係数に data$i の値を掛ける必要があります。

言い換えれば、データの各行に対して、各行に data$a と data$p を使用して coef から特定の数値を取得し、その数値にその行の data$i の値を掛けて新しいベクトルを作成する必要があります。次のようなデータで:

> data
  p a         i          z
1 1 1 2.2561469      67553
2 5 2 0.2316390       6812
3 2 3 0.4867456         .
4 3 1 0.1511705         .
5 4 2 0.8838884         .

行と列の名前に基づいて coef データ フレームに係数を作成する必要があると考えていましたが、そこからどこへ行くべきかわかりません。

前もって感謝します、

イアン

4

1 に答える 1

2

data.frameを注文するcoefと、列名が存在しないかのようにインデックスを付けることができます。

coef <- coef[,order(names(coef))]

次にapply、各行への関数:

myfun <- function(x) {
  x[3]*coef[x[1], x[2]]
}

data$z <- apply(data, 1, myfun)

> data
  p a         i         z
1 1 1 2.2561469 67553.460
2 5 2 0.2316390  6812.271
3 2 3 0.4867456 13100.758
4 3 1 0.1511705  4338.503
5 4 2 0.8838884 26341.934
> 
于 2012-06-07T19:32:38.843 に答える