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

如何基于现有DataFrame行新增汇总行?dplyr实现方案咨询

使用dplyr实现按国家汇总分数并添加汇总行

没问题,用dplyr来实现这个需求非常简洁,我给你一步步拆解怎么做:

1. 先构造原始数据

首先我们先还原你给出的原始数据集,用tibble创建符合tidyverse风格的数据框:

library(dplyr)

# 构造原始数据
df <- tibble(
  Type = c(rep("University", 3), rep("College", 3)),
  Country = rep(c("Australia", "Brazil", "Hong Kong"), 2),
  Score = rep(10, 6)
)

2. 生成按国家汇总的行

接下来按Country分组,计算每个国家的总分,同时把Type列标记为All:

# 生成汇总数据
summary_df <- df %>%
  group_by(Country) %>%
  summarise(
    Type = "All",
    Score = sum(Score),
    .groups = "drop"  # 取消分组,避免后续操作受分组残留影响
  )

这里的.groups = "drop"很关键,它会在汇总后自动取消分组,防止后续合并数据时出现意外问题。

3. 合并原始数据与汇总数据

最后用bind_rows把原始数据和汇总数据合并,再调整顺序让结果和你期望的一致:

# 合并并调整顺序
final_df <- bind_rows(df, summary_df) %>%
  # 给Type列设置排序优先级,确保顺序是University → College → All
  mutate(Type_order = case_when(
    Type == "University" ~ 1,
    Type == "College" ~ 2,
    Type == "All" ~ 3
  )) %>%
  arrange(Country, Type_order) %>%
  select(-Type_order)  # 移除临时排序列

查看最终结果

运行上述代码后,打印final_df就能得到你想要的输出:

print(final_df)
#> # A tibble: 9 × 3
#>   Type       Country     Score
#>   <chr>      <chr>       <dbl>
#> 1 University Australia      10
#> 2 College    Australia      10
#> 3 All        Australia      20
#> 4 University Brazil         10
#> 5 College    Brazil         10
#> 6 All        Brazil         20
#> 7 University Hong Kong      10
#> 8 College    Hong Kong      10
#> 9 All        Hong Kong      20

整个过程完全用dplyr的管道语法实现,比循环更简洁易读,也符合tidy数据的处理习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:50:15