R中生成无序两变量成对比较数据框的简化实现咨询
更简便的R实现变量无序成对比较方法
你的需求本质是生成无自身比较、无顺序重复的无序两两组合,R里有现成的内置函数和工具包可以直接实现,比你当前的代码简洁很多:
1. 内置函数 combn()(推荐)
combn() 是R基础包自带的函数,专门用于生成指定长度的无序组合,自动跳过自身比较和顺序重复的情况,一步到位:
sp.all.var = c(LETTERS[1:10]) # 生成所有无序两两组合,返回矩阵 pairwise_matrix = combn(sp.all.var, 2) # 转成你需要的数据框格式 df.pairwise = as.data.frame(t(pairwise_matrix)) colnames(df.pairwise) = c("Var1", "Var2") nrow(df.pairwise) # 输出45,和你原代码结果一致
2. gtools 包的 combinations()
如果更习惯直接得到数据框格式,可以用gtools包的combinations()函数,参数更直观:
library(gtools) sp.all.var = c(LETTERS[1:10]) # 直接生成数据框格式的无序两两组合 df.pairwise = combinations( n = length(sp.all.var), r = 2, v = sp.all.var ) colnames(df.pairwise) = c("Var1", "Var2")
这两种方法都不需要手动过滤自身比较的行,也不用通过排序拼接去重,完全贴合你的需求,代码量减少一大半。
内容的提问来源于stack exchange,提问作者M. Beausoleil
相关产品推荐
相关产品推荐

