【发布时间】:2020-09-02 17:20:27
【问题描述】:
我正在尝试生成一个数据集,在该数据集中,我在以后每三行更改第一列,当我更改第一列时,第二列和第三列也会随之更改。下面给出的例子。我对如何使用嵌套的 for 循环实现这一点有点困惑。
df = NULL
for (CDRID in 1:3)
{
for (STARTDATE in 20200517:20200519)
{
for (PRIIDENTITY in 4:6)
{
df1 = rbind(df, data.frame ( "CDR_ID"=CDRID, "START_DATE"=STARTDATE, "PRI_IDENTITY"=PRIIDENTITY)) }}}
【问题讨论】:
-
请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557(和xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,
dput(head(x))或data.frame(...))。 -
迭代增长的 data.frames 在概念上有效,但速度非常慢:每次调用
rbind,它都会对所有行进行完整的复制。这意味着如果您循环这九次(如您的循环所示),第一批在内存中重复八次(想象一下它是如何扩展的)。最好将它们添加到list,然后在最后将它们与do.call(rbind, L)、dplyr::bind_rows(L)或data.table::rbindlist(L)之一结合起来。 (请参阅R Inferno 中的第 2 章“不断增长的对象”。)
标签: r for-loop nested-loops