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

R语言:如何生成保留上一次满足条件的行值的变量z?

解决方案

步骤1:生成变量y

变量y的逻辑很直接:第一行无前置数据,y设为0;后续行判断当前x是否等于前一行x减2,满足则赋值1,否则0。用dplyr的lag()和row_number()就能实现。

步骤2:生成变量z

变量z需要累积保留上一次y=1时的x值,这时候用purrr的accumulate2()函数最合适——它可以同时遍历两个向量(y和x),并根据上一步的结果更新当前值。初始值设为0,每一步如果当前y是1,就替换为当前x,否则沿用之前的z值。

完整代码

library(dplyr)
library(purrr)

# 构造示例数据框
df <- tibble(x = c(9, 8, 6, 9, 7, 5))

# 生成y和z变量
result_df <- df %>%
  mutate(
    # 生成y变量
    y = ifelse(row_number() == 1, 0, as.integer(x == lag(x) - 2)),
    # 生成z变量:accumulate2返回的结果比原数据多一个初始值,用[-1]去掉
    z = accumulate2(y, x, .init = 0, 
                   ~ ifelse(..2 == 1, ..3, ..1))[-1]
  )

# 查看结果
print(result_df)

运行结果

# A tibble: 6 × 3
      x     y     z
  <dbl> <int> <dbl>
1     9     0     0
2     8     0     0
3     6     1     6
4     9     0     6
5     7     1     7
6     5     1     5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:35:21