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