r - 基于R中特定类别的其他列以百分比计算列
问题描述
我是 R 的初学者,需要帮助完成任务。带有 dput 的虚拟数据集的输出(真实集合非常大):
structure(list(CODE = c(453, 463, 476,
798, 885, 582, 626, 663, 457, 408
), CATEGORY = c("CIG", "BET", "CIG", "CIG", "ARI", "CRR", "ARI", "CIG",
"CIG", "BET"), AMOUNT = c(22, 5, 6, 52, 16, 11, 6, 70, 208, 5),
PRICE = c(5.56, 8.29, 3.89, 3.8, 4.05, 3.99, 3.55, 7.69, 6.75,
5.2), BRAND = c("ROTHMANS", "ALLINO", "MARLBORO", "ROTHMANS", "AURIELO",
"SOLINOS", "CHLEBLO", "MARLBORO", "LD", "SOLINOS"
)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
应该做什么:应该添加一个列,以百分比显示每个品牌的份额。首先我所做的是以这种方式创建一个新列“VALUE”:
df$VALUE <- with(df, AMOUNT*PRICE)
现在必须以这样的方式创建 SHARE 列:特定类别中特定品牌的值总和(来自列 VALUE)除以整个类别的值总和。例如,“ROTHMANS”属于 CIG 类别,它的值总和是 319.92,整个 CIG 类别的总和是 2285,56,因此,SHARE=14%。并且应该在每种情况下进行计算。我认为 dplyr 库可以是合适的,但找不到解决方案。
解决方案
您可以先取值并获取每个 的sum
比例。BRAND
CATEGORY
library(dplyr)
df %>%
group_by(CATEGORY, BRAND) %>%
summarise(VALUE = sum(VALUE)) %>%
mutate(SHARE = prop.table(VALUE) * 100) %>%
ungroup
# CATEGORY BRAND VALUE SHARE
# <chr> <chr> <dbl> <dbl>
#1 ARI AURIELO 64.8 75.3
#2 ARI CHLEBLO 21.3 24.7
#3 BET ALLINO 41.4 61.5
#4 BET SOLINOS 26 38.5
#5 CIG LD 1404 61.4
#6 CIG MARLBORO 562. 24.6
#7 CIG ROTHMANS 320. 14.0
#8 CRR SOLINOS 43.9 100
推荐阅读
- php - 在 WooCommerce 中以编程方式将礼品产品变体自动添加到购物车?
- r - 如何使用 R 中的向量逐列过滤数据帧?
- python - 分组并将其分配给python pandas中的中间组
- javascript - 使用 Multer 解析多部分 JSON
- python - 有没有办法在多维张量上获得 torch.mode
- python - R 中 qexp 的 Python 等价物是什么?
- r - 如何在 R 中使用 ggplot 绘制多个条形图
- macos - VSCode 远程资源管理器不显示远程容器
- r - ggplot 用于具有不同颜色的负值的直方图
- go - 缺少数据 Hyperledger Fabric 链码