如何将求和函数应用于一列的所有行

时间:2018-03-24 23:23:37

标签: r

我想在R。

中运行以下formula

1

我的数据框如下所示:

   Y   N       s
1 100  1       1
2 101  0.95    2
3 110  0.9025  3
4 112  0.8573  4
5 114  0.8145  5
6 120  0.7737  6

其中N是公式中的beta ^ s-1,beta = 1-0.05(=折扣因子)。

公式的结果应该在新列中输入我的数据框。这个新列的第一行可以如下计算,其中k = 3

mydata$Ydsc<- crossprod(mydata$N[1:3],mydata$Y[2:4])/sum(mydata$N[1:3])

t = 2的第二个值将来自

mydata$Ydsc<- crossprod(mydata$N[1:3],mydata$Y[3:5])/sum(mydata$N[1:3])

但是,我的问题是在R中的函数中正确地表达它,以便它应用于Y列中的每一行。

我的方法是使用apply函数,但我没有设法在我的函数中包含Y_t + s:

fun <- function(x,y) {
  crossprod{x[1:3],y)/sum(x[1:3])
  x <- mydata$N
  y <- mydata$Y
}
Ydsc<-apply(mydata[,1],1,fun)

我该怎么做?

1 个答案:

答案 0 :(得分:2)

也许你想要在最后的Note中可重复定义mydata的地方。 fun使用矩阵x作为输入,其第一列为Y,第二列为N。它将Y的当前行和连续行用于总计k行,并且N行的下一行和连续行总共k行并将N的那些归一化,乘以和求和。它将它应用于输入的每一行。

library(zoo)

k <- 3
k1 <- k+1
fun <- function(x) sum(prop.table(x[-k1, 2]) * x[-1, 1])
rollapply(mydata, k1, fun, by.column = FALSE, align = "left", fill = NA)
## [1] 107.4777 111.9316 115.1972       NA       NA       NA

代价略长的代码,为清晰起见,我们可以像这样编写fun

fun <- function(x) {
  Y <- x[, 1]
  N <- x[, 2]
  sum(prop.table(N[-k1]) * Y[-1])
}

注意

Lines <- "   Y   N       s
1 100  1       1
2 101  0.95    2
3 110  0.9025  3
4 112  0.8573  4
5 114  0.8145  5
6 120  0.7737  6"
mydata <- read.table(text = Lines)