Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中数据帧行的组合_R_Data.table_Combinations - Fatal编程技术网

R中数据帧行的组合

R中数据帧行的组合,r,data.table,combinations,R,Data.table,Combinations,我想创建一个新的数据帧,这样 df1 结果 A1 B1 C1 A2 B2 C2 1 2 3 4 5 6 1 2 3 7 8 9 4 5 6 7 8 9 基本上,行的成对组合使得行[i]!=第[j]行 我可以用for循环来做这个。但我想知道是否有一种方法可以使用data.table或apply函数来加快速度。如果数据框中总是数字,那么可以使用以下方法 ## Generate data DF <- as.data.frame(matrix(1:9,3)) DF

我想创建一个新的数据帧,这样

df1

结果

A1 B1 C1 A2 B2 C2
1  2  3  4  5  6
1  2  3  7  8  9
4  5  6  7  8  9
基本上,行的成对组合使得行[i]!=第[j]行
我可以用for循环来做这个。但我想知道是否有一种方法可以使用data.table或apply函数来加快速度。

如果数据框中总是数字,那么可以使用以下方法

## Generate data
DF <- as.data.frame(matrix(1:9,3))
DF
  V1 V2 V3
1  1  4  7
2  2  5  8
3  3  6  9
这就产生了这个矩阵

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    1    2    3    7    8    9
[3,]    4    5    6    7    8    9
如果在数据框中需要非数字列,则需要稍微调整上面的代码

根据以下评论进行更新

为了使输入与OP相同,我们只需要确保在函数调用中提取行而不是列

DF <- as.data.frame(matrix(1:9,3,byrow=TRUE))
t(apply(t(combn(3,2)), 1, FUN = function(x){unlist(DF[x,])}))

顺序不同,但结果相同。

如果数据帧中总是数字,则可以使用以下命令

## Generate data
DF <- as.data.frame(matrix(1:9,3))
DF
  V1 V2 V3
1  1  4  7
2  2  5  8
3  3  6  9
这就产生了这个矩阵

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    1    2    3    7    8    9
[3,]    4    5    6    7    8    9
如果在数据框中需要非数字列,则需要稍微调整上面的代码

根据以下评论进行更新

为了使输入与OP相同,我们只需要确保在函数调用中提取行而不是列

DF <- as.data.frame(matrix(1:9,3,byrow=TRUE))
t(apply(t(combn(3,2)), 1, FUN = function(x){unlist(DF[x,])}))

顺序不同,但结果相同。

一种不会强制不同列都是相同类型的解决方案:

DF <- as.data.frame(matrix(1:9,3,byrow=TRUE))

cmb <- combn(seq_len(nrow(DF)), 2)
cbind(DF[cmb[1,],], DF[cmb[2,],])

#    V1 V2 V3 V1 V2 V3
#1    1  2  3  4  5  6
#1.1  1  2  3  7  8  9
#2    4  5  6  7  8  9

DF一种不会强制不同列都是相同类型的解决方案:

DF <- as.data.frame(matrix(1:9,3,byrow=TRUE))

cmb <- combn(seq_len(nrow(DF)), 2)
cbind(DF[cmb[1,],], DF[cmb[2,],])

#    V1 V2 V3 V1 V2 V3
#1    1  2  3  4  5  6
#1.1  1  2  3  7  8  9
#2    4  5  6  7  8  9

DF不知道为什么这会吸引这么多的反对票。要做到这一点其实相当棘手。不知道为什么会吸引这么多的反对票。事实上,要做到这一点相当棘手。您的示例数据与OP的不一样。试试
DF Lol-直到现在才注意到你的评论。迟做总比不做好你的示例数据与OP的不一样。试试
DF Lol-直到现在才注意到你的评论。迟到总比不做好