【问题标题】:Create data frame and change variable each iteration in for loop or apply创建数据框并在 for 循环中每次迭代更改变量或应用
【发布时间】:2013-09-01 06:23:41
【问题描述】:

我对 R 有点陌生,这个网站在回答很多问题时对我有很大的帮助。但是,我最近遇到了一个问题,并且已经用尽所有选项来自己找到解决方案,并且需要一些帮助。

我正在尝试编写一个代码,在其中创建多个数据帧(或矩阵)INSIDE 循环并将其循环 5000 次。在每个循环中,我希望变量发生变化,以便稍后检索每个循环的数据。 此外,我希望能够对其他数据帧重复此方法,并在创建这些新数据帧时,它会根据其所在的迭代利用其他数据帧。 我试图找到解决方案,它似乎可以是for loopapply 函数,但我不确定如何执行它。作为我希望看到的示例:

for (i in 1:10) {
df.a[i] <- data.frame (…information...)
df.b[i] <- data.frame (...information...)
df.c[i] <- data.frame (new.col.A=df.a[i]$column1, new.col.B=df.b[i]$column2)
}

然后,在运行循环之后,如果我要编写 df.c3,我会在第三次迭代中找到循环中创建的数据框,其中包含 中第 3 次迭代的数据df.adf.b.

通过这样做,我“最接近”得到我认为自己需要的东西:

df.a = seq (1, 10, by=1)
df.b = seq (1,10, by=1)
df.c = seq (1,10, by=1)
for (i in 1:10) {
df.a[[i]] <- data.frame (...information)
...
}

但这通常会导致错误:“要替换的项目数不是替换长度的倍数”

所以我不确定我还能做什么,真的希望有人能够提供帮助。

【问题讨论】:

  • df.a 是一个向量,您将其作为列表进行索引。也不清楚你想要的结果是什么。 data.frames的列表?

标签: r


【解决方案1】:

将对象df.x 创建为空列表:

df.a <- list()
df.b <- list()
df.c <- list()

然后使用双正方形后备访问(并写入)单个数据帧:

for (i in 1:10) {
  df.a[[i]] <- data.frame(...)
  df.b[[i]] <- data.frame(...)
  df.c[[i]] <- data.frame(new.col.A=df.a[[i]]$column1, new.col.B=df.b[[i]]$column2)
}

【讨论】:

  • 非常感谢,这正是我所需要的。但是,发生了一个意想不到的问题,我没想到在我的原始帖子中问。虽然for loop 成功地用于数据帧的迭代(例如df.a[[i]]),但我还需要遍历一个特定数据帧的列(例如df.rng)。如果 df.rng 的列是 X1:X10,例如,在 iteration 4(即 df.a[[4]])上,我还需要它来遍历 df.rng$X[[4]](df.rng)。 rng$X[[i]]) 等等。你知道怎么做吗?如果这还不够,我会写一个更详细的问题。谢谢。
  • @AndrewJ 使用df.rng[,i],如果你有only 这个列(X1,...,X10),按顺序,或者df.rng[,paste0("X",i)] 来引用这些列姓名。不要不要使用df.rng$X[[i]],因为这意味着df.rng的第i行和第“X”列的值。
猜你喜欢
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2012-08-07
  • 2013-05-15
相关资源
最近更新 更多