2016-07-15 12 views
0

以下は、私が持っているデータフレームです。列2は最も近い契約の満了日であり、列3は次の最も近い契約の満了日である。私は各列の28日の有効期限まで加重平均日数を与えるために必要な列2の割合を示すベクトルを作成しようとしています。各行の複数の列に関数を適用する

f <- function(x){ 
DF$DaysXone*(x) + (DF$DaysXtwo*(1-(x)) -28} 

をし、私はuniroot()でいくつかのことを試してみたが、今は

おかげでこだわっている:

Date  DaysXone  DaysXtwo 
1 2006-01-03  15  43 days 
2 2006-01-04  14  42 days 
3 2006-01-05  13  41 days 
4 2006-01-06  12  40 days 
5 2006-01-09  9  37 days 
6 2006-01-10  8  36 days 

私が試してみました!

+0

私は、私は完全にあなたの質問を理解していないんです。いずれかの行に期待される出力の例を教えてください。 –

+0

はい、最初の行から、私が欲しい答えは.5357、15x + 43(1-x)-28 = 0の解です。すべての行についてこれを行いたいと思います。ありがとう! –

答えて

0

それともdata.tableで行く:

library(data.table) 
df <- data.frame(DaysXone = c(15,14,13,12,9,8), DaysXtwo = c(43, 42,41,40, 37,36)) 
setDT(df)[,Perc := (28-DaysXtwo)/(DaysXone - DaysXtwo),] 

    DaysXone DaysXtwo  Perc 
1:  15  43 0.5357143 
2:  14  42 0.5000000 
3:  13  41 0.4642857 
4:  12  40 0.4285714 
5:  9  37 0.3214286 
6:  8  36 0.2857143 
0

[OK]を、私はこれが何をすべきだと思う:

library(plyr) 
ddply(df, "date", function(i) {res = (-i$DaysXtwo + 28)/(i$DaysXone - i$DaysXtwo)}) 
date  V1 
1 2006-01-03 0.5357143 
2 2006-01-04 0.5000000 
3 2006-01-05 0.4642857 
関連する問題