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

如何在tidyverse中高效实现分组内多paper的rate差值计算

嘿,这里有个高效的tidyverse实现方案,完全不需要用pivot_wider转宽表,非常适合你这种分组内特定类别差值计算的场景,尤其当paper取值很多时,这种方法的效率优势会更明显:

实现代码

library(tidyverse)

# 你的原始数据集构造
df <- tibble(paper = rep(c("A_2012", "B_2019"), each = 5), 
             question = rep(c(1,2,3,4,5), 2), 
             rate = c(4.545455, 4.010000, 4.672727, 4.100000, 3.418182, 3.060000, 4.563636, 3.760000, 4.636364, 4.000000))

# 核心计算逻辑
df_result <- df %>%
  group_by(question) %>%
  summarize(
    diff_rate = rate[paper == "B_2019"] - rate[paper == "A_2012"],
    .groups = "drop"  # 可选,用来取消分组状态,让结果回到普通tibble
  )

# 查看结果
df_result

方案说明

  1. 高效性:全程保持长表结构,不需要转换数据形态,避免了pivot_wider在类别数量多时带来的内存开销和性能损耗。
  2. 直观性:直接在分组内通过paper的取值索引对应的rate值,完成B - A的差值计算,逻辑清晰易懂。
  3. 扩展性:如果后续需要对比其他paper组合,只需要修改paper == "XXX"的条件即可,非常灵活。

运行后你会得到和预期完全一致的结果:

A tibble: 5 x 2

question diff_rate

1 1 -1.49
2 2 0.55
3 3 -0.91
4 4 0.54
5 5 0.58

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:38:12