在foreach循环中推断数据

时间:2016-05-18 16:10:06

标签: r foreach subset

采用以下示例,我创建了一个data.frame df1。 对于每次迭代,我们会混合df1的顺序并将其重命名为df2 然后我们将条件应用于df2,即:

  • df2[1,1] == 1时,我们希望对df2进行分组,以便我们删除df2$B==125的情况,如果df2[1,1] != 1,则不执行任何操作
  • 作为df2[1,1] == 3的第二步,我们希望对df2进行分组,以便我们删除df2$B==108的情况,如果df2[1,1] != 1,则不执行任何操作< / LI>

但我不知道如何编码这一步。有人可以填补下面的空白。 当我们运行代码时,输​​出应该成功返回9到10之间的值。

require(doParallel)
set.seed(123)
A <- 1:10
B <- c(106,144,131,107,125,108,105,119,112,127)
df1 <- data.frame(A,B)

m <- 100

Sample = foreach(i=c(1:m)) %do%{

  #shuffle order of data
  df2 <- df1[sample(1:nrow(df1)), ]
  df2
  # when df2[1,1] == 1 then remove df2$B==125, otherwise leave df2 as is

  # or
  # when df2[1,1] == 3 then remove df2$B==108, otherwise leave df2 as is

  length(df2$A)
}

1 个答案:

答案 0 :(得分:1)

试试这段代码:

require(doParallel)
set.seed(123)
A <- 1:10
B <- c(106,144,131,107,125,108,105,119,112,127)
df1 <- data.frame(A,B)

m <- 100

Sample = foreach(i=c(1:m)) %do%{

    #shuffle order of data
    df2 <- df1[sample(1:nrow(df1)), ]
    df2
    if (df2[1,1]==1) df2 <- df2[-which(df2$B==125),]
    if (df2[1,1]==3) df2 <- df2[-which(df2$B==108),]

    print(nrow(df2))
}