如何堆叠数据集使每个观测值关联其他所有观测值(排除自身)
生成所有非自身匹配的观测值关联数据集
以下是几种在R中实现需求的方法:
方法1:Base R 原生实现
无需额外安装包,利用基础函数完成:
# 生成两个数据集的全笛卡尔积 full_combinations <- merge(df, df, by = NULL) # 过滤掉id相同的行,并重命名列 final_result <- full_combinations[full_combinations$id.x != full_combinations$id.y, ] colnames(final_result) <- c("id", "x1", "id2", "x2") # 按id排序并重置行名(和示例结果格式对齐) final_result <- final_result[order(final_result$id), ] rownames(final_result) <- NULL final_result
方法2:Tidyverse 工具链实现
使用dplyr和tidyr的组合,代码更简洁直观:
library(tidyverse) final_result <- df %>% # 生成全组合,给第二个表的列加后缀 cross_join(df, suffix = c("", "2")) %>% # 排除自身匹配的行 filter(id != id2) %>% # 按id排序 arrange(id) final_result
方法3:Data.table 高效实现
适合处理大规模数据集,运算效率更高:
library(data.table) # 转换为data.table格式 setDT(df) # 生成非自身匹配的全组合 final_result <- df[df, on = .(id != id), allow.cartesian = TRUE] # 重命名列名 setnames(final_result, c("id", "x1", "id2", "x2")) # 按id排序 final_result <- final_result[order(id)] final_result
内容的提问来源于stack exchange,提问作者Victor Shin
相关产品推荐
相关产品推荐

