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

R中如何计算数据框所有行组合的各列数值差值

R tidyverse 实现任意两两行组合的列差值计算

实现代码

library(tidyverse)

# 给原数据添加行号标识
df_with_id <- my_df %>% mutate(row_id = row_number())

# 生成所有唯一行对并计算差值(仅保留行i>行j的无重复组合)
pair_diff <- expand_grid(row_i = df_with_id$row_id, row_j = df_with_id$row_id) %>%
  # 若需要包含i<j的反向差值,删除下一行filter即可
  filter(row_i > row_j) %>%
  # 关联两行的原始数值
  left_join(df_with_id, by = c("row_i" = "row_id"), suffix = c("", "_i")) %>%
  left_join(df_with_id, by = c("row_j" = "row_id"), suffix = c("_i", "_j")) %>%
  # 自动计算所有数值列的差值,适配任意列数的输入表
  mutate(across(ends_with("_i"), .names = "diff_{str_remove(.col, '_i$')}") - across(ends_with("_j"))) %>%
  # 保留所需输出列
  select(row_i, row_j, starts_with("diff_"))

输出示例

基于你提供的示例数据,输出结构如下:

> pair_diff
# A tibble: 10 × 5
   row_i row_j diff_a  diff_b  diff_c
   <int> <int>  <dbl>   <dbl>   <dbl>
 1     2     1  0.563  0.415   0.0917
 2     3     1  0.179  0.433  -0.781 
 3     3     2 -0.384  0.0176 -0.872 
 4     4     1  0.620 -0.157   0.055 
 5     4     2  0.057 -0.573  -0.036 
 6     4     3  0.441 -0.590   0.835 
 7     5     1  0.373  0.253  -0.029 
 8     5     2 -0.190 -0.163  -0.120 
 9     5     3  0.194 -0.180   0.752 
10     5     4 -0.247  0.410  -0.084 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:39:03