如何将数据框列除以另一列中的值,重复数据框中的多个产品?

时间:2017-11-02 14:14:34

标签: r

我有两个数据框AB。两个数据框都有三种不同产品的值。

这是A:

    Product Q1
1 Product X  4
2 Product Y  7
3 Product Z  8

在这里B:

    Product Q1
1 Product X 41
2 Product Y 72
3 Product Z 89

我想通过执行以下操作对这些数据框进行计算:

  • 产品X在A 中的Q1值由产品X在B 中的Q1值除以。然后将产品X的Q1值除以A 中的产品Y的B值中的Q1值。然后转到Z.(所以产品X&A在A 中的Q1值是一个常数,它除以每个产品在B中的Q1值。)
  • 然后下一列将是相同的,但对于产品Y在Q 中的Q1值。
  • 最后,对Z来说是一样的。

理想情况下,我最终会得到一个像这样的数据框:

    Product ProductXdiv ProductYdiv ProductZdiv
1 Product X  0.09756098  0.17073171  0.19512195
2 Product Y  0.05555556  0.09722222  0.11111111
3 Product Z  0.04494382  0.07865168  0.08988764

是否有一个可以帮助您以相当简单的方式计算出来的软件包?或者它需要自定义功能?非常感谢您的建议。

2 个答案:

答案 0 :(得分:0)

使用sapply进行迭代,以A[,2]B[,2]进行迭代。您可以根据需要使用setNames重命名列。

cbind(A, sapply(A[,2], function(d) sapply(B[,2], function(x) d/x)))

   Product Q1          1          2          3
1 ProductX  4 0.09756098 0.17073171 0.19512195
2 ProductY  7 0.05555556 0.09722222 0.11111111
3 ProductZ  8 0.04494382 0.07865169 0.08988764

答案 1 :(得分:0)

这是一个tidyr解决方案。

library(tidyr)
library(magrittr)

A<-data.frame(Product<-c("X","Y","Z"),Q1<-c(4,7,8))
B<-data.frame(Product<-c("X","Y","Z"),Q1<-c(41,72,89))

x<-merge.data.frame(A,B,by=NULL)
names(x)<-c("ProductA","Q1A","ProductB","Q1B")

x%<>%mutate(div=Q1A/Q1B)%>%
    select(-Q1A,-Q1B)%>%
    spread(ProductB,div)