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

在R中通过索引对data frame执行数学运算 求解各州12月与1月数值差

实现方案

方案1:基于group_by+summarize直接计算

这是适配你现有尝试思路的解法,代码如下:

library(dplyr)

# 计算每个州12月减1月的差值
result <- df %>%
  group_by(state) %>%
  summarize(
    dec_jan_diff = value[month == "12"][1] - value[month == "01"][1]
  )

逻辑说明:分组后通过逻辑判断直接提取对应月份的value值做差,末尾加[1]是为了确保每个月只取唯一一条记录,避免偶发重复数据导致运算报错。按你给出的示例数据,该代码计算AL州的结果刚好为2,符合预期。

方案2:转换为宽表后计算(适合后续同类转换需求)

如果后续需要频繁计算不同月份的差值,建议先把长表转为宽表,后续运算无需重复写筛选逻辑:

library(dplyr)
library(tidyr)

result <- df %>%
  # 按州、年份为唯一标识,把月份转为字段,对应值为value
  pivot_wider(
    id_cols = c(state, year),
    names_from = month,
    names_prefix = "m_",
    values_from = value
  ) %>%
  # 直接通过字段名做差,后续其他月份差值只需修改此处即可
  mutate(dec_jan_diff = m_12 - m_01)

注意提示

如果你的month字段是数值类型而非带前导零的字符串,把上述代码中筛选条件的"01"、"12"改为1、12即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:07