【问题标题】:How can I make a function for calculating variables using two dataframes?如何使用两个数据框创建一个计算变量的函数?
【发布时间】:2019-03-07 14:11:38
【问题描述】:

这里有两个数据框,data1和data2

数据1

 id     A     B     C     D    E      F      G
1 id1  1.00  0.31 -3.20  2.50  3.1 -0.300 -0.214
2 id2  0.40 -2.30  0.24 -1.47  3.2  0.152 -0.140
3 id3  1.30 -3.20  2.00 -0.62  2.3  0.460  1.320
4 id4 -0.71  0.98  2.10  1.20 -1.5  0.870 -1.550
5 id5  2.10 -1.57  0.24  1.70 -1.2 -1.300  1.980 

> data2
    factor constant
1      A   -0.321
2      B    1.732
3      C    1.230
4      D    3.200
5      E   -0.980
6      F   -1.400
7      G   -0.300

实际上,data1 是一大组数据,id 最大为 1000,因子最大为 z。 data2 也有从 a 到 z 的因子和对应的常数变量。

而且,对于所有因子,我想将 data1 中因子的值与该因子对应的 data2 的常数相乘。然后,我想将乘数的总数创建到 data1 中的一个新变量“total”中。

例如>创建'id1'= (A value 1.0 (data1) x A constant -0.32 (data2) + (B value 0.31 x 1.732) + (C -3.20 x 1.230) + ( D 2.5 x 3.2) + (E 3.1 x 0.980) + (F -0.300 x -1.40) + (G -0.214 x -0.300)的“总数”

【问题讨论】:

    标签: r function dataframe


    【解决方案1】:

    如果您已将 data1 中的列名和 data2 中的行以相同的顺序排序,您可以这样做:

    t(t(dat1[-1]) * dat2$constant)
    
    #         A        B       C      D      E       F       G
    #1 -0.32100  0.53692 -3.9360  8.000 -3.038  0.4200  0.0642
    #2 -0.12840 -3.98360  0.2952 -4.704 -3.136 -0.2128  0.0420
    #3 -0.41730 -5.54240  2.4600 -1.984 -2.254 -0.6440 -0.3960
    #4  0.22791  1.69736  2.5830  3.840  1.470 -1.2180  0.4650
    #5 -0.67410 -2.71924  0.2952  5.440  1.176  1.8200 -0.5940
    

    或者如果您需要总数:

    res = t(t(dat1[-1]) * dat2$constant)
    res = cbind(res, total = rowSums(res))
    res
    #         A        B       C      D      E       F       G     total
    #1 -0.32100  0.53692 -3.9360  8.000 -3.038  0.4200  0.0642   1.72612
    #2 -0.12840 -3.98360  0.2952 -4.704 -3.136 -0.2128  0.0420 -11.82760
    #3 -0.41730 -5.54240  2.4600 -1.984 -2.254 -0.6440 -0.3960  -8.77770
    #4  0.22791  1.69736  2.5830  3.840  1.470 -1.2180  0.4650   9.06527
    #5 -0.67410 -2.71924  0.2952  5.440  1.176  1.8200 -0.5940   4.74386
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-03
      • 2022-01-09
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      相关资源
      最近更新 更多