R:如何将较低维数据帧与较高维数据帧相乘作为标量

时间:2014-07-04 14:35:10

标签: r

我有一个数据框P,它有因子变量“m”和“q”。此外,数据帧D具有因子变量“m”,“q”,“f”和“t”。我想获得一个新的数据框H,其中包含因子“m”,“q”,“f”和“t where。

H(m,f,q,t) = P(m,q) * D(m,q,f,t) for all m,q,f and t.

基本上,我想合并共享变量'm'和'q'上的两个数据框,并将它们的Val列相乘

数据以下列格式保存:

> head(P)
                    m     q Val
raw1.Prio0       raw1 Prio0    0.5
raw1.Prio1       raw1 Prio1    0.7
raw2.Prio0       raw2 Prio0    1
raw2.Prio1       raw2 Prio1    1
product.Prio0 product Prio0    0.5
product.Prio1 product Prio1    1

> head(D)
                          m     q f   t       Val
product.Prio0.a.P01 product Prio0 a P01  445.6159
product.Prio0.a.P02 product Prio0 a P02  445.6159
product.Prio0.a.P03 product Prio0 a P03  445.6159
product.Prio0.a.P04 product Prio0 a P04 1445.6159
product.Prio0.a.P05 product Prio0 a P05 1445.6159
product.Prio0.b.P01 product Prio0 b P01  176.0000

结果应如下所示:

> head(H)
                          m     q f   t     Val
product.Prio0.a.P01 product Prio0 a P01 222.808
product.Prio0.a.P02 product Prio0 a P02 222.808
product.Prio0.a.P03 product Prio0 a P03 222.808
product.Prio0.a.P04 product Prio0 a P04 722.808
product.Prio0.a.P05 product Prio0 a P05 722.808
product.Prio0.b.P01 product Prio0 b P01  88.000

1 个答案:

答案 0 :(得分:0)

试试这个:

H<-merge(P,D, by=c("m","q"))

H$Val <- H$Val.x * H$Val.y

输出:

> H
        m     q Val.x f   t     Val.y     Val
1 product Prio0   0.5 a P01  445.6159 222.808
2 product Prio0   0.5 a P02  445.6159 222.808
3 product Prio0   0.5 a P03  445.6159 222.808
4 product Prio0   0.5 a P04 1445.6159 722.808
5 product Prio0   0.5 a P05 1445.6159 722.808
6 product Prio0   0.5 b P01  176.0000  88.000