R语言按时间分组生成列全配对并应用函数的tidy实现求助
可行解决方案
先加载依赖包:
library(tidyverse)
核心实现代码:
# 定义自定义运算函数 fun1 <- function(x, y) { sum(x, y) } # 计算流程 result <- data %>% # 按time分组,将每组数据嵌套为列表列 nest(.by = time) %>% mutate( # 逐组处理嵌套数据 pair_result = map(data, \(grp_df) { # 生成本组所有数值列的全量两两组合 expand.grid(firm1 = names(grp_df), firm2 = names(grp_df)) %>% rowwise() %>% # 对每对列应用自定义函数 mutate(value = fun1(grp_df[[firm1]], grp_df[[firm2]])) %>% ungroup() }) ) %>% # 展开计算结果,自动关联对应time值 unnest(pair_result) %>% # 调整列名、顺序匹配预期输出 select(t = time, firm1, firm2, value)
实现逻辑说明
- 用
nest(.by = time)按时间分组隔离数据,避免跨分组计算错误 - 每组内独立生成列名的笛卡尔积配对,逐行调用自定义函数计算两列的运算结果
- 展开结果时自动保留对应分组的time字段,完全符合tidyverse的语法规范
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

