在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
相关产品推荐
相关产品推荐

