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

R语言:如何新增y列,使其值为上一行的yend值(首行设0)

解决方案

最简洁高效的方法是用dplyr的lag()函数,它专门用来获取向量的前一行值,完全匹配你的需求:

library(dplyr)

df <- data.frame(
  category = c(1,2,3,4,5), 
  yend = c(13, 15, 4, 18, 6), 
  stringsAsFactors = FALSE)

df_test <- df |>
  mutate(y = lag(yend, default = 0))

运行后得到的结果就是你要的:

category yend  y
1        1   13  0
2        2   15 13
3        3    4 15
4        4   18  4
5        5    6 18

为什么这个方法可行:

  • lag(yend)会为每一行提取yend列的上一行值,第一行没有上一行,默认返回NA
  • 通过default = 0把第一行的NA替换成0,正好对应category=1的情况
  • 这个方法不依赖category的具体数值,只要数据是按你需要的顺序排列的就可以用,通用性很强

补充另一种依赖category数值的方法(不推荐)

如果你一定要基于category的数值来取前一个值,也可以这么写,但只适用于category是连续整数的情况:

df_test <- df |>
  mutate(y = ifelse(category == 1, 0, yend[category - 1]))

但这种方法局限性大,如果category不是连续数字或者起始值不是1,就会出错,所以优先用lag()的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:12:12