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

在R中基于每日端口Port_max与Value用指定公式生成数据框新列遇阻

按每日端口计算最大值并生成新列的解决方案

你的核心需求是:按日期+端口分组,用当日该端口的最大Value,结合公式119×((最大值/当前Value)-1)^1.231生成新列。原代码失败是因为Port_max仅在最大值所在行有值,其余行都是NA,且未做分组处理。

解决步骤(用dplyr实现)

  1. 从Timestamp中提取日期部分,用于按日分组;
  2. 按「日期+端口」分组,计算每组的最大Value(或直接提取组内非NA的Port_max);
  3. 用分组后的最大值代入公式,为每一行生成新列。

代码示例一:直接计算每组Value的最大值

library(dplyr)
library(lubridate)

# 转换Timestamp为日期格式,提取日期列
df <- df %>%
  mutate(Date = as.Date(Timestamp))

# 分组计算最大值并生成新列x
df1 <- df %>%
  group_by(Date, Port) %>%
  mutate(
    # 计算当日当前端口的Value最大值
    daily_port_max = max(Value, na.rm = TRUE),
    # 代入公式计算新列
    x = 119 * ((daily_port_max / Value) - 1) ^ 1.231
  ) %>%
  ungroup()

代码示例二:利用现有Port_max列提取最大值

如果原数据中Port_max确实是当日该端口的最大值(仅最大值行非NA),也可以直接提取组内的Port_max最大值:

df1 <- df %>%
  mutate(Date = as.Date(Timestamp)) %>%
  group_by(Date, Port) %>%
  mutate(
    daily_port_max = max(Port_max, na.rm = TRUE),
    x = 119 * ((daily_port_max / Value) - 1) ^ 1.231
  ) %>%
  ungroup()

异常处理(可选)

如果某组的Value全为NA,max(..., na.rm = TRUE)会返回-Inf,导致计算出错。可以用ifelse过滤这类情况:

x = ifelse(is.finite(daily_port_max), 119 * ((daily_port_max / Value) - 1) ^ 1.231, NA)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:54:37