gpt4 book ai didi

r - 遍历数据框中所有可能的列和行组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:57:42 24 4
gpt4 key购买 nike

我正在寻找某种方法来迭代数字数据框中所有可能的列和行组合。所以它可能看起来像这样(可能有许多可能的组合中的一些):

  • 第一次迭代:A 列 + 第 1 行
  • 第二次迭代:B 列 + 第 1 行
  • 第 3 次迭代:A 列 + B 列 + 第 1 行
  • 第 4 次迭代:A 列 + B 列 + 第 1 行 + 第 2 行
  • 等等……

对于列和行的每个组合,应执行简单的数学计算,其结果应存储到数据帧 result 中。这样我想最终找到产生最高/最低计算结果的列和行的组合。

所以我的代码看起来像这样(关于计算):

calc = sum(sum(colSums(data)) + sum(rowSums(data)) / (nrow(data) * ncol(data)))

所以我的问题是:

  1. 如何在 r 代码中创建这个迭代过程,即尝试所有可能组合的过程?我考虑过使用两个嵌套的 for() 循环,但我不确定这是否可行(特别是我如何在不知道列/行的名称和编号的情况下处理这些列/行)
  2. 我怎样才能最终将所有结果存储到一个单个数据帧resultresult 应包含计算结果以及列和行的相应组合。

你有什么办法可以解决这个问题吗?

这里有一些数据可供使用:

data = structure(list(GDP = c(18.2, 8.5, 54.1, 1.4, 2.1, 83.6, 17), 
Population = c(1.22, 0.06, 0, 0.54, 2.34, 0.74, 1.03), Birth.rate = c(11.56,
146.75, 167.23, 7, 7, 7, 10.07), Income = c(54, 94, 37, 95,
98, 31, 78), Savings = c(56.73, 56.49, 42.81, 70.98, 88.24,
35.16, 46.18)), .Names = c("GDP", "Population", "Birth.rate",
"Income", "Savings"), class = "data.frame", row.names = c(NA,
-7L))

最佳答案

我没有完全理解我们正在努力实现的目标,也许这是一个开始:

library(data.table)

cc <- 1:ncol(data)
rr <- 1:nrow(data)

rbindlist(
lapply(cc, function(i){
ccN <- combn(cc, i)
rbindlist(
apply(ccN, 2, function(iN){
rbindlist(
lapply(rr, function(j){
rrN <- combn(rr, j)
rbindlist(
apply(rrN, 2, function(jN){
data.frame(
Sum = sum(c(
unlist(data[jN, ]),
unlist(data[, iN]))),
Desc = paste(c("rows",jN,"cols",iN), collapse = ",")
)
})
)
})
)
})
)
})
)


# Sum Desc
# 1: 326.61 rows,1,cols,1
# 2: 490.70 rows,2,cols,1
# 3: 486.04 rows,3,cols,1
# 4: 359.82 rows,4,cols,1
# 5: 382.58 rows,5,cols,1
# ---
#3933: 2687.14 rows,1,2,3,5,6,7,cols,1,2,3,4,5
#3934: 2560.92 rows,1,2,4,5,6,7,cols,1,2,3,4,5
#3935: 2556.26 rows,1,3,4,5,6,7,cols,1,2,3,4,5
#3936: 2720.35 rows,2,3,4,5,6,7,cols,1,2,3,4,5
#3937: 2862.06 rows,1,2,3,4,5,6,7,cols,1,2,3,4,5

关于r - 遍历数据框中所有可能的列和行组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36788088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com