如何以成对的方式将数据帧的每一行附加到所有其他行

问题描述 投票:0回答:2

我有一个数据框:

df1<-data.frame(1:3,4:6,7:9)

我想将它的每一行附加到同一数据帧的每一行,所以我得到这个:

result<-data.frame(c("1 1","1 2","1 3","2 1","2 2","2 3","3 1","3 2","3 3"),c("4 4","4 5","4 6","5 4","5 5","5 6","6 4","6 5","6 6"),c("7 7","7 8","7 9","8 7","8 8","8 9","9 7","9 8","9 9"))

每个单元格中的每个元素都会成对附加到同一列的其他元素。

我尝试了不同的“粘贴”组合,但没有得到我想要的。我测试的一种可能的解决方案如下:

fpaste <- function(x){mapply(paste, x, df1)}
result_exp <- apply(t(df1), 1, fpaste)

但这不起作用。我正在寻找一个“基本”解决方案,并试图避免将软件包作为“dplyr”。预先感谢您的帮助。

r dataframe combinatorics
2个回答
0
投票

使用

expand.grid

sapply(list(1:3, 4:6, 7:9), \(x) do.call(paste, expand.grid(x, x)))

#       [,1]  [,2]  [,3] 
# [1,] "1 1" "4 4" "7 7"
# [2,] "2 1" "5 4" "8 7"
# [3,] "3 1" "6 4" "9 7"
# [4,] "1 2" "4 5" "7 8"
# [5,] "2 2" "5 5" "8 8"
# [6,] "3 2" "6 5" "9 8"
# [7,] "1 3" "4 6" "7 9"
# [8,] "2 3" "5 6" "8 9"
# [9,] "3 3" "6 6" "9 9"

0
投票

不确定行顺序是否重要,但您也可以使用

outer

sapply(df1, \(x) outer(x, x, FUN = paste))
#       X1.3  X4.6  X7.9 
#  [1,] "1 1" "4 4" "7 7"
#  [2,] "2 1" "5 4" "8 7"
#  [3,] "3 1" "6 4" "9 7"
#  [4,] "1 2" "4 5" "7 8"
#  [5,] "2 2" "5 5" "8 8"
#  [6,] "3 2" "6 5" "9 8"
#  [7,] "1 3" "4 6" "7 9"
#  [8,] "2 3" "5 6" "8 9"
#  [9,] "3 3" "6 6" "9 9"
© www.soinside.com 2019 - 2024. All rights reserved.