在每行的多列上应用函数

时间:2016-07-15 17:38:21

标签: r dataframe

以下是我的数据框。第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()的一些事情,但现在我被卡住了

谢谢!

3 个答案:

答案 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))