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

如何用dplyr计算数据框当前行与前一行的绝对变化及百分比变化?

用dplyr实现数据框的绝对变化与百分比计算

先处理原始数据格式

如果你的原始数据是行名为previous/current的格式,先把行名转为显式列,方便后续操作:

library(dplyr)
library(tibble)

# 构造原始数据(如果你的数据已经是带period列的,可跳过这步)
df <- data.frame(
  a = c(5, 4),
  b = c(10, 5),
  row.names = c("previous", "current")
) %>%
  rownames_to_column(var = "period")

提取关键值并计算变化

先提取previous和current对应的数值,再计算绝对变化(当前值-前值)和百分比变化((当前值-前值)/前值*100),最后把结果合并到原数据框:

# 提取前值和当前值
prev <- df %>% filter(period == "previous") %>% select(a, b) %>% unlist()
curr <- df %>% filter(period == "current") %>% select(a, b) %>% unlist()

# 生成变化行并合并
result_df <- df %>%
  bind_rows(
    # 绝对变化行
    tibble(
      period = "absolute change",
      a = curr["a"] - prev["a"],
      b = curr["b"] - prev["b"]
    ),
    # 百分比变化行(转成带%的字符串)
    tibble(
      period = "percent change",
      a = paste0(round((curr["a"] - prev["a"])/prev["a"] * 100, 0), "%"),
      b = paste0(round((curr["b"] - prev["b"])/prev["b"] * 100, 0), "%")
    )
  )

输出结果

运行后result_df的结构完全符合需求:

# A tibble: 4 × 3
  period           a     b    
  <chr>           <chr> <chr> 
1 previous        5     10    
2 current         4     5     
3 absolute change -1    -5    
4 percent change  -20%  -50%  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:23:20