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

如何在R语言中高效计算列与前一列的数值差值?

批量计算每行相邻列的数值差值

需求说明

我需要计算数据框每行中后一列与前一列的数值差值,示例如下:

原始数据:

1   2   3   
R1. 50 60  90
R2. 80 95  115
R3. 90 100 120

计算规则:第2列-第1列、第3列-第2列、第n列-第n-1列,最终生成的结果表如下:

1   2      
R1. 10 30 
R2. 15 20 
R3. 10 20

现有手动实现方式

目前我针对少量列手动写了如下代码,但面对大量列/行时效率太低:

# 计算差值
diff_new = tab_new[,2] - tab_new[,1]
diff_new2 = tab_new[,3] - tab_new[,2]
diff_new3 = tab_new[,4] - tab_new[,3]
diff_new4 = tab_new[,5] - tab_new[,4]

# 合并成新表
diff.table_new = cbind(diff_new,diff_new2,diff_new3,diff_new4)

高效解决方案

在R中可以用**apply()函数结合diff()**批量处理,一行代码就能完成所有行的相邻列差值计算:

# 按行计算相邻列差值,转置后转为数据框
diff.table_new = as.data.frame(t(apply(tab_new, 1, diff)))

如果习惯tidyverse风格,也可以用dplyr包实现:

library(dplyr)
library(tidyr)

diff.table_new = tab_new %>%
  rowwise() %>%
  mutate(diff_vals = list(diff(c_across(everything())))) %>%
  unnest_wider(diff_vals)

代码说明

  • apply(tab_new, 1, diff):对数据框tab_new的每一行(参数1代表按行处理)应用diff()函数,该函数默认计算向量中后一个元素减前一个元素的差值。
  • t():apply返回的结果是按列排列的,转置后才能匹配原数据的行结构。
  • as.data.frame():将运算得到的矩阵转为数据框,方便后续分析处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:22:05