2016-04-22 9 views
2

数値データフレーム内のすべての可能な列と行の組み合わせに対して何らかの反復方法を探しています。だから、おそらく次のようになります(ただ、多くの可能な組み合わせの数ががあるかもしれない):データフレームの列と行のすべての可能な組み合わせを繰り返します。

  • 第一反復:列Aは、+ 1行目
  • 第二反復:列B + 1行目
  • 第三反復:カラムA +カラムB + 1行目
  • 4反復:カラムA +カラムB +行1 +行2
  • などとに... COの組み合わせ毎

行と列には簡単な数学的計算が行われ、その結果はデー​​タフレームresultに格納される。このようにして、最終的に最高と最低の計算結果をもたらす列と行の組み合わせを見つけることができます。

だから私のコードは、(計算に関して)次のようになります。

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

だから私の質問は以下のとおりです。

  1. はどのようにして、R-コードでプロセスを反復このを作成してください、考えられるすべての組み合わせを試すプロセスですか?私は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)) 
+4

あまり明確ではありません。 「列と行の組み合わせ」とはどういう意味ですか?例を教えてください。 – nicola

+0

私はあなたが説明したものからのポイントを表示しません。あなたは最大値とすべての数値が正の値であることを調べるので(常にそうですか?)、 'sum(data)'で列と行全体を合計します。分については、1つの行と1つの列を選択し、すべての可能な組み合わせに対してこれを実行するだけです: 'min(rowSums expand.grid(colSums(data)、rowSums(data))))' –

+0

@Colonel Beauvel :私は最終的にkmeansクラスタリングのためにそれを必要としています。私が提供した "calc"コードは単なるダミーです。クラスタ化するkmeansでは、列と行の選択が非常に重要ですが、それは明確になりますか? – Joni

答えて

1

、多分これがスタートです:私に

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 
関連する問題