如何在R中对不同行(不同年份)的变量进行差值计算?
实现数据框新增差值列的两种方法
首先先把你的数据集转换成可直接运行的R数据框:
df <- data.frame( Group.1 = as.Date(c("2000-01-01", "2001-01-01", "2002-01-01", "2003-01-01", "2004-01-01")), spring = c(46.00000, 33.33333, 37.66667, 31.33333, 35.66667), fall = c(19.0, 19.0, 19.0, 13.0, 13.0), year = 0:4 )
方法一:基础R原生实现
直接通过向量索引完成计算,无需额外包:
df$diff <- c(NA, df$spring[-1] - df$fall[-nrow(df)])
df$spring[-1]提取第2到第5行的spring值df$fall[-nrow(df)]提取第1到第4行的fall值- 两者相减得到对应行的差值,开头补
NA满足第一行缺失的要求
方法二:dplyr包简洁实现
用dplyr的lag()函数自动偏移fall列,代码更直观:
library(dplyr) df <- df %>% mutate(diff = spring - lag(fall))
lag(fall)会将fall列整体向下偏移一行(即当前行的lag(fall)等于上一行的fall值)- 直接用当前行spring减去偏移后的fall,第一行因无前置值自动生成
NA
最终生成的diff列结果为:NA, 14.33333, 18.66667, 12.33333, 22.66667
内容的提问来源于stack exchange,提问作者gracekot
相关产品推荐
相关产品推荐

