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

本质上,X,Y值来自 24 孔板。记录周期结束后,该grp值将增加 N+1(只是巧合,grp/well以相同的值结束)。

在每个记录周期之后,记录会中断,一旦完成,记录将恢复。我目前正在尝试分析我设置为的数据中的缺失值NA。为了找到缺失的值,我使用了 MICE 包,使用了这段代码(如下)。我希望wellMICE 包单独分析每个组,而不是一次性分析所有X坐标Y

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)
  }
}

两件事 - 首先,for 循环非常慢,我不确定提高脚本速度的方法。我最初的想法是在我的 df 中创建一个新列,每次df$well值更改时都会填充 N+1 ,因为这将包含df$well& df$grp,但我一直无法想出一个函数来生成它。生成新列后,我可以使用一个 for 循环,而不是上面的两个 - 我认为这会提高速度吗?其次,上面的脚本不断地重写“temp_df”,而我要求它添加到它——我尝试使用搜索结果中建议的“rbind”和“apply”,但无济于事。

如果这看起来相对简单,或者已经在其他地方得到了回答,我们深表歉意。正如我所说,我对 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 回答