You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于现有行计算并向DataFrame添加‘Final’行?

解决方案:生成包含Final行的DataFrame

需求说明

从df_original出发,按**国家(Short_Name/Long_Name)和日期(Short_date/Long_date)**分组,计算每组的Final金额(公式:Original金额 - Discount金额),并将这些Final行追加到原数据中,得到目标df_final。

方法一:使用dplyr(tidyverse)

这是可读性较强的分组处理方式:

# 加载dplyr包
library(dplyr)

# 1. 分组计算Final行
df_final_rows <- df_original %>%
  group_by(Short_Name, Long_Name, Short_date, Long_date) %>%
  summarize(
    Category = "Final",
    Amount = Amount[Category == "Original"] - Amount[Category == "Discount"],
    .groups = "drop"
  )

# 2. 合并原数据和Final行,按国家、日期排序
df_final <- bind_rows(df_original, df_final_rows) %>%
  arrange(Short_Name, Short_date, Category)

方法二:使用Base R

无需加载额外包的原生实现:

# 1. 定义分组键
group_keys <- with(df_original, interaction(Short_Name, Short_date, drop = TRUE))

# 2. 按分组计算Final金额
final_amounts <- tapply(df_original$Amount, group_keys, function(x) x[1] - x[2])

# 3. 构造Final行数据框
df_final_rows <- do.call(rbind, lapply(unique(group_keys), function(k) {
  subset_df <- subset(df_original, group_keys == k)[1,]
  subset_df$Category <- "Final"
  subset_df$Amount <- final_amounts[k]
  subset_df
}))

# 4. 合并并排序
df_final <- rbind(df_original, df_final_rows)
df_final <- df_final[order(df_final$Short_Name, df_final$Short_date, df_final$Category),]
rownames(df_final) <- NULL # 重置行名

结果验证

运行上述任意一种方法后,生成的df_final将与你提供的目标数据结构、内容完全一致。

内容的提问来源于stack exchange,提问作者4agreements

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:47:02