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

R语言技术问询:同日期数据合并为一行及三角法数据构建

R语言问题解决方案

一、相同日期数据分组合并到同一行

根据数据结构分两种场景处理:

场景1:同一日期对应不同变量的记录

如果原始数据是长格式(每个日期对应不同变量的多条记录),用tidyr::pivot_wider转成宽格式,将相同日期的记录合并到一行:

# 示例原始数据
df <- data.frame(
  date = c("2023-01-01", "2023-01-01", "2023-01-02"),
  variable = c("sales", "profit", "sales"),
  value = c(1000, 200, 1200)
)

# 合并为宽格式
library(tidyr)
wide_df <- pivot_wider(df, names_from = variable, values_from = value)

场景2:同一日期同一变量有重复记录

如果同一日期的同一指标有多条记录,先聚合(求和、均值等)再合并,用dplyr分组处理:

# 示例原始数据
df <- data.frame(
  date = c("2023-01-01", "2023-01-01", "2023-01-02"),
  sales = c(500, 500, 1200)
)

# 分组聚合合并
library(dplyr)
agg_df <- df %>% 
  group_by(date) %>% 
  summarize(sales_total = sum(sales), .groups = "drop")

二、构造三角法(损失三角)数据

你需要的是精算领域常用的损失三角结构,通过长格式数据转宽格式即可实现,自动填充右上角的NA:

步骤1:准备长格式原始数据

假设原始数据包含origin(事故年)、dev(发展期)、value(赔付金额)三列:

tri_long <- data.frame(
  origin = c(2005,2005,2005,2005,2006,2006,2006,2007,2007,2008),
  dev = c(1,2,3,4,1,2,3,1,2,1),
  value = c(1500,2420,2720,3020,1150,1840,2070,1650,2640,1740)
)

步骤2:转换为三角矩阵格式

用tidyr::pivot_wider直接转换,缺失的发展期自动填充NA,再调整行名列名匹配需求:

library(tidyr)
library(dplyr)

# 转宽格式
tri_wide <- tri_long %>% 
  pivot_wider(names_from = dev, values_from = value) %>% 
  arrange(origin)

# 调整为示例格式(origin为行名,dev为列名)
tri_final <- tri_wide %>% 
  column_to_rownames("origin")
colnames(tri_final) <- 1:4

# 查看结果
print(tri_final)

进阶:自动生成所有可能的origin-dev组合

如果原始数据缺少部分origin-dev的空记录,先构造所有可能的组合,再左连接原始数据,确保三角结构完整:

# 生成所有origin和dev的组合
all_combinations <- expand.grid(
  origin = unique(tri_long$origin),
  dev = 1:max(tri_long$dev)
)

# 左连接填充NA
tri_full <- left_join(all_combinations, tri_long, by = c("origin", "dev")) %>% 
  pivot_wider(names_from = dev, values_from = value) %>% 
  arrange(origin) %>% 
  column_to_rownames("origin")

运行后得到的结果和你手动构造的完全一致。

内容的提问来源于stack exchange,提问作者محمد الشهري

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:35:33