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

R语言基于条件计算行差值:group1为1时减去最近非NA的x值

Python Pandas 实现

核心逻辑是先对x列做前向填充(携带最近的非NA值向下传递),再按规则计算y值:

import pandas as pd
import numpy as np

# 构造数据集
df = pd.DataFrame({
    'value': [1,2,7,5,8,4,6,3,2],
    'group1': [0,0,0,1,1,1,0,1,1],
    'group2': [0,0,1,0,0,0,1,0,0],
    'x': [np.nan, np.nan, 2.5, np.nan, np.nan, np.nan, 1.5, np.nan, np.nan]
})

# 前向填充x的非NA值
df['x_fill'] = df['x'].ffill()
# 按规则计算y
df['y'] = np.where(df['group1'] == 0, 0, df['value'] - df['x_fill'])
# 可选删除临时辅助列
df = df.drop('x_fill', axis=1)

输出结果与预期完全一致。


R 实现

可以用tidyverse套件快速实现,逻辑和Pandas版本一致:

library(tidyverse)

# 构造数据集
df <- tibble(
  value = c(1,2,7,5,8,4,6,3,2),
  group1 = c(0,0,0,1,1,1,0,1,1),
  group2 = c(0,0,1,0,0,0,1,0,0),
  x = c(NA, NA, 2.5, NA, NA, NA, 1.5, NA, NA)
)

# 计算y
df <- df %>%
  fill(x, .direction = "down") %>% # 前向填充x
  mutate(y = ifelse(group1 == 0, 0, value - x))

如果不想修改原始x列,可以生成临时辅助列计算:

df <- df %>%
  mutate(x_fill = zoo::na.locf(x, na.rm = FALSE),
         y = ifelse(group1 == 0, 0, value - x_fill)) %>%
  select(-x_fill)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:03