【问题标题】:extrapolate data within the foreach loop在 foreach 循环中推断数据
【发布时间】:2016-05-18 16:10:06
【问题描述】:

举个例子,我创建了一个data.framedf1。 对于每次迭代,我们将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,则不执行任何操作

但我不知道如何编写这一步。有人可以填补下面的空白。 当我们运行代码时,输​​出应该成功返回 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)
}

【问题讨论】:

  • “删除 df2$B==125”操作的预期结果是什么?您想用其他值替换它吗,例如 0 或 NA?
  • 不,我只是想从数据集中删除它,这样 df2 的长度就会变成 9
  • 你想删除整行吗?

标签: r foreach subset


【解决方案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))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多