以下是我的数据框。第2栏是最近合同到期的日期,第3栏是下一个最近合同到期的日期。我正在尝试创建一个向量,它给出了第2列所需的百分比,以便为每行提供加权平均天数到期28天。
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
我试过了:
f <- function(x){
DF$DaysXone*(x) + (DF$DaysXtwo*(1-(x)) -28}
然后我尝试了uniroot()的一些事情,但现在我被卡住了
谢谢!
答案 0 :(得分:0)
好的,我认为应该这样做:
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
答案 1 :(得分: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
答案 2 :(得分:0)
library(data.table)
df <- data.frame(DaysXone = c(15,14,13,12,9,8), DaysXtwo = c(43, 42,41,40, 37,36))
perc_function = function(x,y) {
out = (28-y)/(x-y)
return(out)
}
df = cbind(df, perc = mapply(perc_function, df$DaysXone, df$DaysXtwo))