如何制作一个使用两个数据框计算变量的函数?

时间:2019-03-07 14:11:39

标签: r function dataframe

这里有两个数据帧data1和data2

data1

 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)的“总计”

1 个答案:

答案 0 :(得分: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