Используйте процентную разницу от двух кадров данных и примените к третьему - PullRequest
0 голосов
/ 01 июня 2018

У меня есть 3 набора данных:

df1
group             Int            var_a
  100     0.044211088     -0.012787829
  200    -0.047100911      0.077978254
  300     0.038150455     -0.007357197
  400     0.040368393     -0.008928011
  500     0.062128815     -0.030815453
  600     0.004291613      0.026521099

df2
          Int           var_a
1   0.9701036     0.001630575

df3
                                   Int            var_a
standardized coefficient   0.918654358     -0.001624649

df1 являются остатками значений df2.Так, например, для group 100 в столбце Int значение на 0,044 больше 0,970 от df2 Int.Это было бы эквивалентно тому, чтобы сказать, что это увеличение на 4,56%.Я хочу рассчитать процентную разницу от df2 каждого столбца с соответствующим столбцом из df1.

Затем я хочу применить этот процент увеличения или уменьшения для каждого значения с помощью df3, чтобы получить эквивалентный коэффициент для каждой группы.

Более подробно:

1) Take Разница в процентах между df1 и df2:

group      int       var_a
  100    4.56%    -784.25%
  200   -4.86%    4782.25%
  300    3.93%    -451.20%
  400    4.16%    -547.54%
  500    6.40%   -1889.85%
  600    0.44%    1626.49%

Затем примените эту процентную разницу из таблицы выше к соответствующим столбцам вdf3, чтобы получить этот окончательный результат:

group           int           var_a
  100    0.96052072     0.011116705
  200   0.874051434    -0.079319507
  300   0.954781512      0.00570581
  400   0.956881822     0.007270915
  500   0.977488184     0.029078811
  600   0.922718366    -0.028049362

Дайте мне знать, если это имеет смысл!

1 Ответ

0 голосов
/ 02 июня 2018

Делает ли это то, что вам нужно?

df1$Int <- df3$Int*(1+((df2$Int+df1$Int)/df2$Int)-1)
df1$Var_a <- df3$Var_a*(1+((df2$Var_a+df1$Var_a)/df2$Var_a)-1)

РЕДАКТИРОВАТЬ

fun1 <- function(df1,df2,df3){

  df1 <- df3*(1+((df2+df1)/df2)-1)


  outdata<-data.frame(df1)
  return(outdata)
}

для гибкости изменить диапазон индекса после разделения fct

df.new <- sapply(split(df1[,2:3], rownames(df1)), fun1, df2=df2,df3=df3)

df.new <- cbind(df1$group, data.frame(matrix(unlist(df.new), nrow=nrow(df1), byrow=T)))

colnames(df.new) <- colnames(df1)
...