我正在努力汇总原始数据,以向所有客户显示过去 10 年的历史销售情况。每行包括 (1) 公司名称、(2) 零件号、(3) 销售年份、(4) 数量。对我们一些顶级客户的销售包括许多行,上面列出了每张发票的详细信息。
Company_1 2013 part_number_1 quantity_1
Company_1 2013 part_number_2 quantity_2
Company_1 2015 part_number_1 quantity_3
Company_2 2013 part_number_3 quantity_4
Company_2 2016 part_number_4 quantity_5
我希望将第一列中的公司名称和其余列中的 2013 - 2023 年数据进行合并。如果对特定公司的销售占用原始数据中的 150 行,则应将这些行聚合为 1 行,细分每年的销售数量。
| Company Name | 2013 | 2014 | 2015 |
| -------- | -------- | -------- | -------- |
| Company 1 | Quantity | Quantity | Quantity |
| Company 2 | Quantity | Quantity | Quantity |...
sales_data_clean <- sales_data_raw %>%
rename(part_number = Base,
year = Year,
company_name = `Company Name`,
quantity = Quantity)
sales_data_grouped <- sales_data_clean %>%
select(company_name, part_number, year, quantity)
我编写了上述代码,但无法弄清楚如何合并类似公司的数据并根据表中的销售数量创建 2013 - 2023 年的新列。
任何帮助将不胜感激。
首先,阅读本文,并始终在您的问题中包含示例或玩具数据:您将获得更好更快的帮助。
如果您只想汇总每个公司的年销售额(
quantity
),而不考虑各个部分(part_number
),请尝试以下操作:代码:
library(tidyverse)
toy_sales %>%
summarise(.by = c(company_name, year), quantity = sum(quantity)) %>%
pivot_wider(names_from = year, values_from = quantity, names_prefix = "y_")
输出:
# A tibble: 3 × 7
company_name y_2010 y_2011 y_2012 y_2013 y_2014 y_2015
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 John_Beatles 5075 3875 2700 3975 4000 3250
2 Mick_Stones 1250 4025 4475 3200 2975 3450
3 Paul_Beatles 3225 3875 2075 3925 3650 3700
玩具数据:
set.seed(123)
sample_x <- \(x) sample(x, 250, replace = TRUE)
toy_sales <- tibble(
company_name = sample_x(paste0(band_members$name, "_", band_members$band)),
year = sample_x(2010:2015),
part_number = sample_x(1:10),
quantity = sample_x(seq.int(0, 500, by = 25))
) %>%
arrange(across(everything()))