我有两个数据框A
和B
。两个数据框都有三种不同产品的值。
这是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
我想通过执行以下操作对这些数据框进行计算:
理想情况下,我最终会得到一个像这样的数据框:
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
是否有一个可以帮助您以相当简单的方式计算出来的软件包?或者它需要自定义功能?非常感谢您的建议。
答案 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)