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

如何依据A列字符串值计算列值差并在tibble中生成novig_new列?

问题1:根据A列字符串值对B列数值执行减法运算

假设你用tidyverse工具集,核心思路是先按A列分组,再根据你的具体减法逻辑处理B列数值,以下是两种常见场景的实现代码:

  • 场景1:以A列中某特定字符串对应的B值为基准,组内其他B值减去该基准值
library(tidyverse)

# 示例数据集
df <- tibble(
  A = c("基准组", "分组1", "分组1", "分组2", "分组2"),
  B = c(10, 15, 12, 8, 9)
)

# 执行减法:每组B值减去该组A为"基准组"的B值
df <- df %>%
  group_by(str_extract(A, "^.*组")) %>%
  mutate(B_subtracted = B - B[A == "基准组"]) %>%
  ungroup()
  • 场景2:A列是明确的操作指令(比如"减5""减10"),按指令对B列做减法
df <- df %>%
  mutate(B_subtracted = case_when(
    A == "减5" ~ B - 5,
    A == "减10" ~ B - 10,
    TRUE ~ B # 无匹配指令时保持原数值
  ))
问题2:创建novig_new列(其他博彩公司novig_prob减去Pinnacle的对应值)

核心是先提取每个球队对应的Pinnacle博彩公司novig_prob作为基准,再按球队匹配计算差值,代码如下:

library(tidyverse)

# 假设你的数据集名为df,包含team(球队)、bookmaker(博彩公司)、novig_prob列
# 方法1:分组直接计算
df <- df %>%
  group_by(team) %>%
  # 提取每组Pinnacle的novig_prob作为基准
  mutate(pinnacle_base = novig_prob[bookmaker == "Pinnacle"]) %>%
  # 计算novig_new,Pinnacle自身设为0(可按需改为NA)
  mutate(novig_new = ifelse(bookmaker != "Pinnacle", novig_prob - pinnacle_base, 0)) %>%
  ungroup() %>%
  select(-pinnacle_base) # 移除临时基准列

# 方法2:先提取基准表再左连接(适用于Pinnacle记录可能重复的情况)
pinnacle_ref <- df %>%
  filter(bookmaker == "Pinnacle") %>%
  distinct(team, .keep_all = TRUE) %>%
  select(team, pinnacle_base = novig_prob)

df <- df %>%
  left_join(pinnacle_ref, by = "team") %>%
  mutate(novig_new = novig_prob - pinnacle_base) %>%
  select(-pinnacle_base)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:55:18