如何在R语言中对DataFrame的行进行两两配对拼接
解决方案
你可以利用outer()函数生成每列元素的笛卡尔积,再通过paste()完成拼接,最后用lapply()批量处理所有列并组合成数据框,完全基于base R实现:
# 定义处理单列的函数:生成列内所有两两元素的拼接结果 col_combine <- function(col) { as.vector(outer(col, col, paste, sep = " ")) } # 批量处理df1的每一列,转换为目标数据框 result <- data.frame(lapply(df1, col_combine))
代码说明
outer(col, col, paste, sep = " "):对单列生成所有元素的两两笛卡尔积,并以空格拼接,返回一个3×3的矩阵as.vector():把矩阵按列转为一维向量,对应你想要的"1 1","1 2","1 3",..."3 3"的顺序lapply(df1, col_combine):遍历df1的每一列,执行上述处理,得到包含三列结果的列表data.frame():将列表转换为数据框,匹配目标格式
原有代码无效的原因
你原代码中,apply(t(df1), 1, fpaste)是对转置后的df1逐行(即原df1的逐列)处理,但fpaste里的mapply(paste, x, df1)是把当前列的单个元素和整个df1的每列元素拼接,逻辑偏离了「同一列内两两配对」的需求,因此无法得到正确结果。
内容的提问来源于stack exchange,提问作者Carpa
相关产品推荐
相关产品推荐

