我必须计算每个第 4 级类别在其对应的第 3 级类别(父级)中的价值份额

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

这是我的数据框示例: 级别由类别列中每个名称开头的代码给出, 例如:“01 abc”是 1 级,“01.01.01.00 abc”是 4 级

df <- data.frame(
  Store = c(rep("A", 9), rep("B", 7)),
  Category = c("01 Fruits", "01.01 Apples", "01.01.01 Red Apples", "01.01.02 Green Apples", "01.02 Oranges",
               "01.01.01 Navel Oranges", "01.01.02 Valencia Oranges", "01.01.02.01 Sweet", "01.01.02.02 Juicy",
               "02 Vegetables", "02.01 Carrots", "02.01.01 Baby Carrots", "02.01.02 Sliced Carrots", "02.01.02.01 Thick", "02.01.02.02 Long","02.02 Broccoli"),
  Value = c(100, 50, 30, 20, 50, 20, 30, 20, 10, 150, 75, 35, 40, 25, 15, 75),
  Level = c(1,2,3,3,2,3,3,4,4,1,2,3,3,4,4,2)
)

 Store                  Category Value Level
1      A                 01 Fruits   100     1
2      A              01.01 Apples    50     2
3      A       01.01.01 Red Apples    30     3
4      A     01.01.02 Green Apples    20     3
5      A             01.02 Oranges    50     2
6      A    01.01.01 Navel Oranges    20     3
7      A 01.01.02 Valencia Oranges    30     3
8      A         01.01.02.01 Sweet    20     4
9      A         01.01.02.02 Juicy    10     4
10     B             02 Vegetables   150     1
11     B             02.01 Carrots    75     2
12     B     02.01.01 Baby Carrots    35     3
13     B   02.01.02 Sliced Carrots    40     3
14     B         02.01.02.01 Thick    25     4
15     B          02.01.02.02 Long    15     4
16     B            02.02 Broccoli    75     2

到目前为止,我已经尝试了以下代码,但离我想要的还差得很远, 我希望每个 4 级类别在其相应的 3 级类别(父级)中的价值份额仅适用于 3 级中的 4 级,并且对于 1:3 级只输入 0 或 100 或为空

# Add a new column for Parent_Category
df$Parent_Category <- sub("\\..*", "", df$Category)

# Group the data by Parent_Category and calculate the total value for each
parent_totals <- df %>%
  group_by(Parent_Category) %>%
  summarize(Total_Parent_Value = sum(Value))

# Join the parent_totals back to the original data frame
df <- left_join(df, parent_totals, by = "Parent_Category")

# Calculate the Value_Share_Percent column
df <- df %>%
  mutate(Value_Share_Percent = round(Value / Total_Parent_Value * 100, 2)) %>%
  arrange(Category)

我想要的结果示例:

类别 价值 等级 价值份额 %
01 水果 300 1 100
01.01 苹果 270 2 100
01.01.01 红苹果 100 3 100
01.01.01.00 甜蜜 60 4 60
01.01.01.01 多汁 40 4 40
r dplyr tidyverse rstudio categories
© www.soinside.com 2019 - 2024. All rights reserved.