首页 > 解决方案 > 使用两个数据帧的百分比差异并应用于第三个

问题描述

我有 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 100in column Int,该值是 0.044,大于 df2 的 0.970 Int。这相当于说这是一个 4.56% 的增长。我想计算每列df2与df1的相应列的百分比差异。

然后,我想对每个值应用该百分比增加或减少,df3以获得每个组的等效系数。

更深入:

1)取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

让我知道这是否有意义!

标签: rfor-loopdplyrapply

解决方案


那是你需要的吗?

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)

推荐阅读