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
相关产品推荐
相关产品推荐

