【问题标题】:Use percent difference from two dataframes and apply to third使用两个数据帧的百分比差异并应用于第三个
【发布时间】:2018-06-01 20:51:52
【问题描述】:

我有 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

df1df2 的值的残差。例如,对于列Int 中的group 100,该值是0.044,大于来自df2 Int 的0.970。这相当于说这是一个 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

让我知道这是否有意义!

【问题讨论】:

    标签: r for-loop dplyr apply


    【解决方案1】:

    这符合您的需要吗?

    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)
    }
    

    为了灵活改变分割后的索引范围

    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)
    

    【讨论】:

    • 有没有办法通过索引来做到这一点?列数并不总是相同
    • 你能详细说明一下吗?在 df1 中?
    • 我基本上想根据不同的模型(df3)转移随机效应。所以 df2 显示了系数,而 df1 是基于此的残差。我想采用该百分比差异并将其应用于不同的模型(df3)并获得新的系数
    • 对不起,我真的不明白,也许你可以扩展你的例子
    • 我刚刚编辑了问题以扩展示例,让我知道这是否更有意义!感谢您的帮助
    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 2020-07-31
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多