R中如何基于上一行数值对变量进行分类?
R DataFrame 新增取上一行值列的实现方法
你可以选择以下两种常用方案实现需求:
方案1:无需安装额外包的基础R实现
核心逻辑是把指定列去掉最后一个元素,开头补一个NA,长度和原数据集一致,刚好每个位置对应上一行的数值:
# 构造示例数据集 df <- data.frame( Day = c(1,2,3), Precipitation = c(3,0,3), Condition = c("Wet", "Dry", "Wet") ) # 新增Day Before列 df$`Day Before` <- c(NA, head(df$Condition, -1))
方案2:dplyr包实现(更适合复杂场景)
用dplyr内置的lag()函数,专门用于取列的滞后值,写法更直观:
# 加载dplyr包,如果未安装先运行 install.packages("dplyr") library(dplyr) df <- df %>% mutate(`Day Before` = lag(Condition))
额外说明
- 如果需要按分组(比如不同监测站点、不同区域)分别取对应分组内的上一行值,只需在
mutate前加group_by(你的分组列名)即可,避免跨组取值 - 第一行默认返回NA,如果你需要自定义第一行的默认值,可以给
lag加default参数,比如lag(Condition, default = "无记录")
内容的提问来源于stack exchange,提问作者Lexi
相关产品推荐
相关产品推荐

