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

R语言多列条件求和方法:按月统计各深度列的正负温度总和

R 批量按月份计算各深度温度正负值总和解决方案

错误原因

你代码报错的核心原因是{col}是仅用于.names参数拼接输出列名的占位符,不能直接在.fns的函数逻辑中用来指代当前遍历列。

前置预处理(若未提取年月字段可执行)

如果你的DayStats2数据集还没有Year和Month字段,先执行如下代码提取:

library(dplyr)
library(lubridate)

DayStats2 <- DayStats2 %>%
  mutate(
    Year = year(Date),
    Month = month(Date)
  )

正确批量统计代码

使用dplyr支持的匿名函数语法,用x指代当前遍历的数值列即可实现需求:

MonthIndexes <- DayStats2 %>% 
  group_by(Year, Month) %>% 
  summarise(across(
    .cols = is.numeric, 
    .fns = list(
      # 负温度总和(冰冻度日FDD)
      MonthFDD = ~ sum(x[x < 0], na.rm = TRUE),
      # 正温度总和(融化度日TDD)
      MonthTDD = ~ sum(x[x > 0], na.rm = TRUE)
    ),
    .names = "{fn}_{col}"
  ))

等价传统匿名函数写法

如果你更习惯base R的匿名函数语法,也可以用如下写法,效果完全一致:

MonthIndexes <- DayStats2 %>% 
  group_by(Year, Month) %>% 
  summarise(across(
    .cols = is.numeric, 
    .fns = list(
      MonthFDD = function(x) sum(x[x < 0], na.rm = TRUE),
      MonthTDD = function(x) sum(x[x > 0], na.rm = TRUE)
    ),
    .names = "{fn}_{col}"
  ))

输出说明

最终输出的数据集会按Year、Month分组,每一个原始温度列都会对应生成MonthFDD_xxx(负温度总和)和MonthTDD_xxx(正温度总和)两列,完全不受原始数据列数限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:45:08