2

論文の一部としていくつかのデータを分析しようとしていますが、コードを開発することは不可能であることが証明されています (私にとって)

コードを開発するために、はるかに大きなデータのサブセットを使用しています。(データフレームのリンク方法がわからない)

head(df) 

 well   x   y   time     dist      speed grp
1    1 117 127 15.265 0.000000 0.00000000   1
2    1 118 127 15.303 1.000000 0.06534666   1
3    1 118 127 15.339 0.000000 0.00000000   1
4    1 118 127 15.368 0.000000 0.00000000   1
5    1 119 129 15.403 2.236068 0.14517094   1
6    1 120 129 15.443 1.000000 0.06475426   1

tail(df)

       well   x   y     time     dist        speed grp
664074   24 519 345 6957.419 0.000000 0.0000000000  24
664075   24 519 345 6957.453 0.000000 0.0000000000  24
664076   24 519 345 6957.490 0.000000 0.0000000000  24
664077   24 519 345 6957.529 0.000000 0.0000000000  24
664078   24 518 345 6957.557 1.000000 0.0001437286  24
664079   24 517 344 6957.598 1.414214 0.0002032618  24

基本的にXY値は 24 ウェル プレートのものです。記録期間が完了すると、grp値は N+1 ずつ増加します ( grp/wellが同じ値で終了するのは偶然の一致です)。

各記録期間の後、記録が中断され、これが終了すると、記録が再開されます。現在、に設定したデータの欠損値を分析しようとしていますNA。欠落している値を見つけるために、このコード (以下) を使用して MICE パッケージを使用しました。グループごとに、すべての座標ではwellなく、MICEパッケージによって個別に分析されるようにします。XY

for (i in unique(df$well)){

  w1 <- df[df$well==i,]

  for (j in unique(w1$grp)){

    w2 <- w1[w1$grp==j,]  

    temp_df <- mice(data = w2, m = 5, method = "rf", maxit = 5)
  }
}

2 つのこと - まず、for ループが非常に遅く、スクリプトの速度を改善する方法がわかりません。私の最初の考えは、df に新しい列を作成することでした。これには&df$wellが組み込まれるため、値が変更されるたびに N+1 で満たされますが、これを生成する関数を思い付くことができませんでした。新しい列が生成されたら、上記の 2 つのループの代わりに 1 つの for ループを使用できます。これにより、速度が向上すると思いますか? 第二に、上記のスクリプトは「temp_df」を継続的に書き換えますが、追加する必要があります。検索結果から提案された「rbind」と「apply」を使用してみましたが、役に立ちませんでした。df$welldf$grp

これが比較的簡単に思える場合、または他の場所で回答されている場合はお詫び申し上げます。私が言ったように、私はRとコンピューティング言語全般に比較的慣れていません。

4

1 に答える 1

2

expand.grid()andを使用して、この基本 R ソリューションを検討してくださいlapply()

# DATA FRAME OF ALL COMBINATIONS BETWEEN WELL AND GRP
matches <- expand.grid(unique(df$well), unique(df$grp))

# LIST OF DFs
dfList <- lapply(seq_len(nrow(matches)), function(i) {
              x <- data.frame(df[(df$well == matches$Var1[i]) & 
                                 (df$grp == matches$Var2[i]),])
              temp_df <- mice(data = x, m = 5, method = "rf", maxit = 5)
          })

# ROW BIND LIST OF DFs
finaldf <- do.call(rbind, dfList)
于 2016-07-23T19:58:36.043 に答える