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

基于行按列项算术运算汇总数据框:计算每日(Heads-Tails)/(Heads+Tails)比率

解决方法

你可以用两种高效的方式实现需求,避免手动逐个日期计算:

方法一:直接分组计算(更简洁高效)

在按日期分组后,直接通过条件求和得到每日Heads和Tails的总和,再计算比率:

library(tidyverse)

# 生成原始数据(你的代码)
set.seed(1)
start <- mdy("01/01/2022")
end <- start + as.difftime(4, units = "days")
days <- seq(from = start, to = end, by = 1)
days <- sample(days, 100, replace = T)
flip <- sample(c("Heads", "Tails"), 100, replace = TRUE)
numbers <- rchisq(100, 30)

df <- tibble(days, numbers, flip)

# 核心计算代码
result <- df %>%
  group_by(days) %>%
  summarize(
    heads_total = sum(numbers[flip == "Heads"]),
    tails_total = sum(numbers[flip == "Tails"]),
    ratio = (heads_total - tails_total) / (heads_total + tails_total)
  ) %>%
  ungroup()

# 查看结果
print(result)

这种方法无需额外的数据格式转换,一步完成分组、求和与比率计算,处理大量数据时效率更高。

方法二:先汇总再转宽表

如果你更习惯先按日期和flip分组求和,再转换为宽表计算比率,可以这样做:

result <- df %>%
  group_by(days, flip) %>%
  summarize(total = sum(numbers)) %>%
  ungroup() %>%
  # 将Heads和Tails转为列,缺失值用0填充(避免某天只有一种结果的情况)
  pivot_wider(names_from = flip, values_from = total, values_fill = 0) %>%
  mutate(ratio = (Heads - Tails) / (Heads + Tails))

print(result)

运行后你会得到每个日期对应的比率,和你手动计算的结果完全一致(因为设置了set.seed(1),结果可复现)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:17:14