R语言按年份条件计算列值求和及占比的技术问题
解决按年计算交易总量及骑手类别占比的问题
原代码的问题分析
你写的代码报错主要有三个原因:
- 代码末尾缺少闭合的右括号,导致语法不完整
Year列是数值型数据(2021、2022为数字),不需要加双引号包裹"2021"- 数据框索引写法错误,正确的列索引应该用列名或位置,你当前的写法会把列值当作索引,逻辑完全错误
两种可行的解决方法
方法一:基础R实现
先计算每年的交易总量,再推导各骑手类别的占比:
# 假设你的数据框名为Transactions_per_Year # 计算每年总交易量 year_totals <- tapply(Transactions_per_Year$yearly_transactions, Transactions_per_Year$Year, sum) # 新增总交易量和占比列 Transactions_per_Year$total_yearly <- year_totals[as.character(Transactions_per_Year$Year)] Transactions_per_Year$proportion <- Transactions_per_Year$yearly_transactions / Transactions_per_Year$total_yearly
方法二:tidyverse(dplyr)实现(更适配tibble,代码更简洁)
通过分组计算一步完成需求:
library(dplyr) Transactions_per_Year <- Transactions_per_Year %>% group_by(Year) %>% mutate( total_yearly = sum(yearly_transactions), proportion = yearly_transactions / total_yearly ) %>% ungroup()
最终输出结果
运行后你的tibble会新增total_yearly(当年交易总量)和proportion(该类别占当年总量的比例)两列,结果示例:
# A tibble: 4 × 5 Year Rider_Class yearly_transactions total_yearly proportion <dbl> <chr> <int> <int> <dbl> 1 2021 casual 2528702 5594499 0.452 2 2021 member 3065797 5594499 0.548 3 2022 casual 2321824 5667286 0.410 4 2022 member 3345462 5667286 0.590
内容的提问来源于stack exchange,提问作者Bill Disanza
相关产品推荐
相关产品推荐

