R中计算同分组内相邻行差值、不同分组返回NA的实现方法
R语言分组计算相邻行差值实现方法
实现思路
使用dplyr包的分组函数+偏移函数即可直接满足需求:
- 按名称列
x分组后,每个分组内单独计算偏移 - 用当前行的
y值减去前一行的y值,跨分组时偏移函数取不到对应值会默认返回NA,刚好符合不同分组之间差值返回NA的规则
完整实现代码
首先加载依赖包,再执行计算:
# 加载dplyr包,如果未安装先运行 install.packages("dplyr") library(dplyr) # 示例数据 df <- data.frame( x = c("Jimmy Page","Jimmy Page","Jimmy Page","Jimmy Page", "John Smith", "John Smith", "John Smith", "Joe Root", "Joe Root", "Joe Root", "Joe Root", "Joe Root"), y = c(1,2,3,4,5,7,89,12,34,67,95,9674 ) ) # 计算分组相邻差值 df <- df %>% group_by(x) %>% mutate(y_diff = y - lag(y)) %>% ungroup() # 可选,计算完成后取消分组方便后续处理
输出结果验证
运行后得到的y_diff列结果如下:
| x | y | y_diff |
|---|---|---|
| Jimmy Page | 1 | NA |
| Jimmy Page | 2 | 1 |
| Jimmy Page | 3 | 1 |
| Jimmy Page | 4 | 1 |
| John Smith | 5 | NA |
| John Smith | 7 | 2 |
| John Smith | 89 | 82 |
| Joe Root | 12 | NA |
| Joe Root | 34 | 22 |
| Joe Root | 67 | 33 |
| Joe Root | 95 | 28 |
| Joe Root | 9674 | 9579 |
完全符合需求:同一分组内相邻行差值正常计算,每个分组的第一行以及跨分组的位置自动返回NA。
基础包实现方案(无需安装第三方包)
如果不想依赖第三方包,可以用基础包的ave函数实现:
df$y_diff <- ave(df$y, df$x, FUN = function(v) c(NA, diff(v)))
内容的提问来源于stack exchange,提问作者VRN
相关产品推荐
相关产品推荐

