R如何排列数据帧的所有行,以便在列表中返回所有可能的行组合?

Posted

技术标签:

【中文标题】R如何排列数据帧的所有行,以便在列表中返回所有可能的行组合?【英文标题】:R How to permute all rows of a data frame such that all possible combinations of rows are returned in a list? 【发布时间】:2018-10-28 01:28:07 【问题描述】:

我正在尝试生成数据框(或矩阵,如果这更容易的话)的所有可能的行排列,并将对象作为数据框/矩阵的列表或数组返回。我构建了一个模拟数据框,其尺寸与我正在使用的数据框相同。

test.df <- as.data.frame(matrix(1:80,nrow=16,ncol=5)

编辑:将组合更改为排列

【问题讨论】:

1) 问题没有明确定义。组合中可以有超过两行吗? 2)你已经尝试了什么?一个简单的谷歌搜索“R中的组合”会给你指点而不在这里发布问题。 您是指行的组合还是排列?对于排列,我在下面给出了答案。 我认为你应该澄清你在问什么,否则问题可能会被关闭。 很抱歉给大家带来了困惑。我更正了这篇文章,以便它对任何未来的读者都更有意义。感谢您的帮助。 【参考方案1】:
v.df <- data.frame(symbol = c("a", "b", "c"), number = c(1,2,3))
v.df
##   symbol number
## 1      a      1
## 2      b      2
## 3      c      3

permutate.rows <- function(df) 
  k <- dim(df)[1] # number of rows
  index.df <- as.data.frame(t(permutations(n = k, r = k, v = 1:k)))
  res <- lapply(index.df, function(idx) df[idx, , drop = FALSE])


permutate.rows(v.df) 

给出所有置换 dfs 的列表:

$V1
  symbol number
1      a      1
2      b      2
3      c      3

$V2
  symbol number
1      a      1
3      c      3
2      b      2

$V3
  symbol number
2      b      2
1      a      1
3      c      3

$V4
  symbol number
2      b      2
3      c      3
1      a      1

$V5
  symbol number
3      c      3
1      a      1
2      b      2

$V6
  symbol number
3      c      3
2      b      2
1      a      1

使用 16 而不是 3 和您的数据框将其应用于您的示例。

【讨论】:

排列与组合不同 他写了combinations,但他的意思是permutations,他把它标记为permutation。你能去掉 -1 标志吗? 不是我的 -1。顺便说一句,来自帮助中心“并非所有问题都可以或应该在这里回答。” ***.com/help/how-to-answer 好的,感谢您指出这一点。我只是很生气,因为我仔细阅读并试图弄清楚他的意思......是的,问题发布得很糟糕。但它本身就是一个可以思考的问题。 感谢您的回复。很抱歉原帖中的错字造成混乱。

以上是关于R如何排列数据帧的所有行,以便在列表中返回所有可能的行组合?的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中生成列表的所有不同排列

在 R 中,如何真正快速地遍历数据帧的行?

R:如何从该列表中的所有数据框中删除行?

如何从所有排列中生成所有可能的组合?

Python中一组列表的所有可能排列

R语言(数值列表矩阵)上应用函数(sqrtroundmeanlog)将矩阵所有数据求对数就矩阵整体的均值使用apply函数计算矩阵matrix的行均值列均值trim设置返回结果精度