使用R按比例计算每个产品的分配

  • 本文关键字:分配 按比例 计算 使用 r
  • 更新时间 :
  • 英文 :


我有一个包含产品和数量的数据框架。我想,对于每个产品,在子产品X1、X2、X3中按比例分配添加3行。比例基于重量:

X1 = 0.19
X2 = 0.26
X3 = 0.55

数据帧看起来像:

df = data.frame(Product = c("A","B","C","D"), value = c(30,35,42,12))

Product Quantity
1       A       30
2       B       35
3       C       42
4       D       1

我想在最后构建的表格应该是这样的:

Product Quantity
1        A    30.00
2       X1     5.70
3       X2     7.80
4       X3    16.50
5        B    35.00
6       X1     0.00
7       X2     9.10
8       X3    19.25
9        C    42.00
10      X1     0.00
11      X2    10.92
12      X3    23.10
13       D    12.00
14      X1     0.00
15      X2     3.12
16      X3     6.60

有没有一种不使用循环的R方法(以防产品太多(?

您可以为比例信息创建一个数据帧,并使用crossing创建具有原始df的所有行组合。

library(dplyr)
ref <- data.frame(Product1 = c('X1', 'X2', 'X3'), 
Quantity1 = c(0.19, 0.26, 0.55))
tidyr::crossing(ref, df) %>%
transmute(Product, Product1, value = Quantity1 * value) %>%
bind_rows(df) %>%
arrange(Product, !is.na(Product1)) %>%
mutate(Product = coalesce(Product1, Product)) %>%
select(-Product1)
#  Product value
#   <chr>   <dbl>
# 1 A       30   
# 2 X1       5.7 
# 3 X2       7.8 
# 4 X3      16.5 
# 5 B       35   
# 6 X1       6.65
# 7 X2       9.1 
# 8 X3      19.2 
# 9 C       42   
#10 X1       7.98
#11 X2      10.9 
#12 X3      23.1 
#13 D       12   
#14 X1       2.28
#15 X2       3.12
#16 X3       6.6 

最新更新