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

如何在R中透视数据并执行自定义行级计算?

解决思路与代码实现

核心思路

通过正则拆分列名,将「完成状态列」和「是否需要完成列」配对,过滤出需要完成该指标的人群后,按指标分组计算完成数和完成率。

完整代码

library(tidyverse)

# 示例数据集
df <- data.frame(
  person = c("Alice", "Bob", "Charlie", "Jen","Zar"),
  filed_taxes = c(1,0,1,0,0),
  required_to_file_taxes =c(1,1,1,0,0),
  bought_items = c(1,1,1,0,1),
  required_to_buy_items = c(1,1,1,1,1),
  took_vacation = c(1,0,0,1,1),
  required_to_take_vacation = c(1,1,1,1,1)
)

# 计算完成率
df %>%
  # 拆分列名:提取类型(required/completed)和指标名称
  pivot_longer(
    cols = -person,
    names_to = c("type", "Measure"),
    names_pattern = "(required_to_)?(.*)",
    values_fill = list(type = "completed")
  ) %>%
  # 将类型转为列,实现完成状态与需完成状态的配对
  pivot_wider(names_from = type, values_from = value) %>%
  # 仅保留需要完成该指标的人群
  filter(required == 1) %>%
  # 按指标分组计算核心数据
  group_by(Measure) %>%
  summarise(
    Completed = sum(completed),
    `% Completed` = paste0(round(Completed / n() * 100), "%")
  ) %>%
  # 调整指标顺序匹配期望输出
  arrange(factor(Measure, levels = c("filed_taxes", "bought_items", "took_vacation")))

步骤解释

  1. 拆分列名:用正则表达式(required_to_)?(.*)拆分列名,带required_to_前缀的标记为required类型,其余标记为completed类型,同时提取统一的指标名称(如filed_taxes)。
  2. 转宽格式配对:将type列转为表头,让每行对应「一个人+一个指标」的完成状态与需完成状态的配对数据。
  3. 过滤有效人群:只保留required == 1的行,排除不需要完成该指标的人,避免干扰计算结果。
  4. 分组汇总计算:按指标分组,统计完成人数,再用完成人数除以该指标的总需完成人数,得到百分比并格式化。
  5. 调整顺序:按期望输出的指标顺序排列结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:06:14