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

