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

基于多虚拟变量,用dplyr在R中聚合数据框的优化方法问询

优化方案:用长表统一处理重复逻辑

你可以通过宽表转长表的方式消除重复代码,借助dplyr与tidyr的组合一次性完成所有任务的占比计算,最后再转回宽表得到目标格式:

library(tidyverse)

EarlyAccess <- read_csv("https://dropbox.com/s/antzwk1jh4ldrhi/EarlyAccess_anon.csv?dl=1")

Protein_design_tasks <- EarlyAccess %>%
  # 一次性筛选公司规模列和所有蛋白质设计任务列
  select(size, matches("Improving\\.")) %>%
  # 宽表转长表:将多个任务列合并为「任务编码」「选择响应」两列
  pivot_longer(
    cols = -size,
    names_to = "task_code",
    values_to = "response"
  ) %>%
  # 按公司规模+任务分组,统一计算占比
  group_by(size, task_code) %>%
  summarise(
    total = n(),
    # 提取当前任务的正式名称(对应原代码中filter的匹配值)
    task_name = first(response[response != ""]),
    # 计算该任务的选择占比
    pc_var = sum(response == task_name) / total * 100,
    .groups = "drop"
  ) %>%
  # 长表转回宽表,还原「每个任务占比为单独列」的结构
  pivot_wider(
    id_cols = size,
    names_from = task_name,
    values_from = pc_var,
    names_prefix = "pc_"
  )

关键优化说明:

  • 消除重复代码:无需为每个任务单独写一遍聚合逻辑,转长表后所有任务共享一套计算规则
  • 灵活扩展:后续新增任务列时,只需调整select的匹配规则(或直接添加列名),无需修改核心计算代码
  • 逻辑清晰:通过「宽→长→宽」的转换,把重复的分组、计算、筛选操作合并为统一流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:50:35