如何使用R中的“汇总”函数来计算两列中值的乘积?

问题描述 投票:0回答:1

在orders_joined数据框中,我需要根据我的销售额和价格将它们相乘来计算总收入。然后我需要将它们分配给一个新对象 -total_revenue。

我需要制作这样的表格

这是我的尝试:

我的代码:

total_revenue <- orders_joined %>% 
  group_by(DESCRIP) %>% 
  summarise(num_units = n(),
            tot_rev = num_units*PPU) %>% 
  
  rename(item = DESCRIP)

head(total_revenue, 3)

我的输出:

在我的输出中,鸡蛋布丁和荔枝没有出现,这三个项目都是波巴。 我认为我的“tot_rev = num_units*PPU”有问题,但无法弄清楚哪里出了问题。

r dplyr group-by summarize
1个回答
0
投票

group_by
中重命名组的方法。使用
sum
获取 tot_rev,因为
n()
是每组的项目数。
num_units * PPU
将产生一个具有原始长度的向量。

library(dplyr)

orders_joined %>% 
  group_by(item = DESCRIP) %>% 
  summarize(num_units = n(), tot_rev = sum(PPU))
# A tibble: 10 × 3
   item                       num_units tot_rev
   <chr>                          <int>   <dbl>
 1 Jasmine Milk; Boba                 2   13.5 
 2 Jasmine Milk; No Topping           2   12.5 
 3 Original Milk; Boba                2   11.5 
 4 Original Milk; Egg Pudding         1    5.75
 5 Original Milk; Lychee              3   17.2 
 6 Original Milk; No Topping          2   10.5 
 7 Oriqinal Milk; No Toooin           1    5.25
 8 Taro; Boba                         1    5.75
 9 Taro; Egg Pudding                  1    5.75
10 Taro; Lychee                       3   17.2

数据

orders_joined <- structure(list(order_no = c(1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 
5L, 5L, 5L, 6L, 7L, 8L, 9L, 10L, 11L), item_no = c("T02", "T02", 
"B01", "T01", "J01", "B02", "J00", "T03", "J01", "B00", "B01", 
"B02", "J00", "T02", "B02", "B00", "B03", "B00"), DESCRIP = c("Taro; Lychee", 
"Taro; Lychee", "Original Milk; Boba", "Taro; Boba", "Jasmine Milk; Boba", 
"Original Milk; Lychee", "Jasmine Milk; No Topping", "Taro; Egg Pudding", 
"Jasmine Milk; Boba", "Original Milk; No Topping", "Original Milk; Boba", 
"Original Milk; Lychee", "Jasmine Milk; No Topping", "Taro; Lychee", 
"Original Milk; Lychee", "Original Milk; No Topping", "Original Milk; Egg Pudding", 
"Oriqinal Milk; No Toooin"), PPU = c(5.75, 5.75, 5.75, 5.75, 
6.75, 5.75, 6.25, 5.75, 6.75, 5.25, 5.75, 5.75, 6.25, 5.75, 5.75, 
5.25, 5.75, 5.25)), class = "data.frame", row.names = c(NA, -18L
))
© www.soinside.com 2019 - 2024. All rights reserved.