R语言中如何为data frame按迭代规则新增X3、X4两个列
R实现方案
方法1:基础R循环实现(逻辑直观,无需额外安装包)
直接匹配你描述的计算规则,代码如下:
# 构造原始数据 X1 <- c(451,2,6,2,7) X2 <- c(0,1,6,3,4) df <- data.frame(X1, X2) # 初始化新列 row_n <- nrow(df) df$X3 <- numeric(row_n) df$X4 <- numeric(row_n) # 第一行镜像赋值 df$X3[1] <- df$X2[1] df$X4[1] <- df$X1[1] # 从第二行迭代计算 for (i in 2:row_n) { df$X3[i] <- df$X4[i-1] + 1 df$X4[i] <- df$X3[i] + df$X1[i] }
运行后得到的df和你给出的示例结果完全一致。
方法2:tidyverse无显式循环实现
如果习惯使用tidyverse生态,可以用递推函数accumulate实现,代码如下:
library(dplyr) library(purrr) df <- df %>% mutate( # 先根据递推规则计算X4:第一行取X1,后续行 = 上一行X4 + 1 + 当前行X1 X4 = accumulate(X1, .init = first(X1), function(prev_x4, curr_x1) { prev_x4 + 1 + curr_x1 }) %>% tail(-1), # 再计算X3:第一行取X2,后续行 = 上一行X4 + 1 X3 = if_else(row_number() == 1, X2, lag(X4) + 1) )
内容的提问来源于stack exchange,提问作者AennaPhD
相关产品推荐
相关产品推荐

