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

R语言面板数据实现天数转出现次数及PAY_end滞后值计算

R语言实现面板数据分组编号与滞后差值计算

依赖说明

推荐使用dplyr包实现,语法简洁易读,也提供base R无依赖实现方案供选择。

加载dplyr包

# 未安装先执行安装
# install.packages("dplyr")
library(dplyr)

第一步:构造示例数据

实际使用时替换为你自己的数据集即可:

df <- data.frame(
  ID = c(1,1,1,1,1,2,2,3,3,3),
  FIRM = c("A","A","B","C","D","E","E","F","F","G"),
  PAY_START = c(1,360,720,800,934,1,320,1,340,345),
  PAY_end = c(359,500,780,930,1200,316,360,339,342,600)
)

第二步:核心处理代码

方案1:dplyr实现(推荐)

result <- df %>%
  # 按ID分组
  group_by(ID) %>%
  # 按支付开始时间排序,确保时间顺序正确,原数据已有序可省略
  arrange(PAY_START, .by_group = TRUE) %>%
  # 生成组内顺序编号、滞后差值字段
  mutate(
    Occurence = row_number(),
    Lag_Pay_end = coalesce(PAY_end - lag(PAY_end), 0)
  ) %>%
  # 取消分组,避免影响后续操作
  ungroup()

方案2:base R实现(无需加载第三方包)

# 先按ID、支付开始时间排序
df <- df[order(df$ID, df$PAY_START), ]
# 生成组内顺序编号
df$Occurence <- ave(df$PAY_START, df$ID, FUN = seq_along)
# 计算滞后差值,首行补0
df$Lag_Pay_end <- ave(df$PAY_end, df$ID, FUN = function(x) c(0, diff(x)))

输出结果验证

两种方案得到的结果完全符合预期:

# A tibble: 10 × 6
      ID FIRM  PAY_START PAY_end Occurence Lag_Pay_end
   <dbl> <chr>     <dbl>   <dbl>     <int>       <dbl>
 1     1 A             1     359         1           0
 2     1 A           360     500         2         141
 3     1 B           720     780         3         280
 4     1 C           800     930         4         150
 5     1 D           934    1200         5         270
 6     2 E             1     316         1           0
 7     2 E           320     360         2          44
 8     3 F             1     339         1           0
 9     3 F           340     342         2           3
10     3 G           345     600         3         258

内容的提问来源于stack exchange,提问作者M.KKK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:57:03