首页 > 解决方案 > 在R中组合所有可能的数据框行

问题描述

我有以下数据框:

x <- data.frame("Col1" = c('A', 'B', 'C', 'D'), "Col2" = c('W', 'X', 'Y', 'Z'))

我想要一个新的数据框,其中包含所有可能的行组合组合,这将提供一个数据框,该数据框有两列,其中包含以下内容:

A W
A X
A Y
A Z
B W
B X
B Y
B Z
C W
...

数据框总是有两列,但行数可能会有所不同。

我查看了 permute() 或 sample() 但我没有设法得到我想要的东西。谢谢!

标签: rdataframepermute

解决方案


tidyr::complete()是为此而设计的。我很惊讶我没有在 SO 上看到一个普通的例子。

library(magrittr)
x %>% 
  tidyr::complete(Col1, Col2)

结果:

# A tibble: 16 x 2
   Col1  Col2 
   <fct> <fct>
 1 A     W    
 2 A     X    
 3 A     Y    
 4 A     Z    
 5 B     W    
 6 B     X    
 7 B     Y    
 8 B     Z    
 9 C     W    
10 C     X    
11 C     Y    
12 C     Z    
13 D     W    
14 D     X    
15 D     Y    
16 D     Z    

如果您的真实场景与 OP 一样简单,@bouncyball 的建议expand.grid(x)是最干净的。如果您的现实世界场景更复杂,那么tidyr::complete()可能会让您更轻松地成长。我通常有两个以上的 ID 变量来扩展/完成。这些通常是分析的因变量/结果变量,并且该fill参数允许您为未出现在观察数据集中的组合指定它们的默认值。这是一个SO 示例

编辑以反映@bouncyball 和@ADuv 的建议。


推荐阅读