Как рассчитать тот или иной показатель в R - PullRequest
0 голосов
/ 29 октября 2019

enter image description here

Привет всем, мне нужна ваша помощь для вычисления этого выражения. У меня есть датафрейм с потоками доходов (из 5 "т" периодов) разных лет. Что мне нужно, это команда, чтобы R понял выделенную часть формулы под символом суммирования. Мне нужно R для умножения, когда есть потеря для коэффициента l0, и когда есть коэффициент усиления для коэффициента усиления g0.

delta=15/16
g0=16/15
l0=1
  2004 2006 2008 2010 2012
1   5    10   12   14   8
2   13   5    4    3    1
3   4    2    1    8    10

поэтому, если это кадр данных, для obs № 1 мне нужно рассчитать следующим образом:

[(10-5)*15/16^(4-1)+(12-10)*15/16^(3-1)+(14-12)*15/16^(2-1)]*16/15+[(8-14)*15/16^(1-1)]*1

для obs № 2 следующим образом:

[(5-13)*15/16^(4-1)+(4-5)*15/16^(3-1)+(3-4)*15/16^(2-1)+(1-3)*15/16^(1-1)]*1

для obs 3 следующим образом:

[(2-4)*15/16^(4-1)+(1-2)*15/16^(3-1)]*1 +[(8-1)*15/16^(2-1)+(10-8)*15/16^(1-1)]*16/15

1 Ответ

0 голосов
/ 29 октября 2019

Предполагая, что ваш data.frame генерируется, как показано ниже

x1 <- c(5,10,12,14,8)
x2 <- c(13,5,4,3,1)
x3 <- c(4,2,1,8,10)
df <- as.data.frame(rbind(x1,x2,x3))
rownames(df) <- as.character(c(1,2,3))
colnames(df) <- as.character(c(2004,2006,2008,2010,2012))

, тогда вы можете использовать следующее для вашей цели:

I <- function(x, delta = 15/16, g0 = 16/15, l0 = 1) {
  dx <- diff(x)
  sum(sapply(seq_along(dx), function(k) dx[k]*delta**(length(dx)-k)*ifelse(dx[k]>0, g0,l0)))
}
r <- apply(df, 1, I)

, где I - это функция, как вы указали

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...