如何在R中计算实体间交易净额?优先采用tidyverse/dataframe方案
计算实体间交易净额的tidyverse解决方案
步骤说明
我们可以通过标准化实体对顺序、分组求和的方式,在dataframe内高效计算交易净额,具体实现如下:
1. 加载依赖并构造示例数据
library(tidyverse) # 构造示例交易数据 transactions <- tibble( sending_entity = c("Tim", "Bob", "Sarah", "Jane"), receiving_entity = c("Bob", "Tim", "Jane", "Sarah"), amount_traded = c(100, 50, 25, 50) )
2. 计算交易净额并生成结果描述
net_transactions <- transactions %>% # 标准化实体对顺序,确保同一组实体仅出现一次 mutate( entity1 = pmin(sending_entity, receiving_entity), entity2 = pmax(sending_entity, receiving_entity), # 标记单条交易对净额的贡献方向 net_contribution = case_when( sending_entity == entity1 ~ amount_traded, TRUE ~ -amount_traded ) ) %>% # 按标准化实体对分组,求和得到净额 group_by(entity1, entity2) %>% summarise(net_amount = sum(net_contribution), .groups = "drop") %>% # 生成符合需求的自然语言描述 mutate( description = case_when( net_amount > 0 ~ str_glue("{entity1} 支付 {entity2} {net_amount}"), net_amount < 0 ~ str_glue("{entity2} 支付 {entity1} {abs(net_amount)}"), TRUE ~ "双方交易净额为0" ) )
3. 查看结果
运行上述代码后,net_transactions$description会输出预期结果:
- Tim 支付 Bob 50
- Jane 支付 Sarah 25
内容的提问来源于stack exchange,提问作者TorontoWA
相关产品推荐
相关产品推荐

