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

