【问题标题】:R Loop to reference multiple dataframesR循环引用多个数据帧
【发布时间】:2018-06-28 10:02:16
【问题描述】:

我正在尝试创建一个循环以从 R 中的多个数据帧中提取数据,然后将它们绑定到一个数据帧中。 数据帧的名称都相同,并在末尾附加一个增量(split1、split2、split3...)以区分。

每个数据框都包含一个数字列表,我希望将其附加到 URL。

目前我构建的循环如下:

requester_url <- "https://example.url/users/show_many/ids="
for(i in 1:7 {
  splitname <- paste0('split',i)
  requester_ids <- paste0(splitname, collapse = ",")
  requester_url <-paste0(requester_url,requester_ids)
}

如果我分解我希望元素在循环中执行的操作,这可能会更有帮助。 在下面的部分中,我想创建一个新变量,它是应用了增量的数据框名称。

splitname <- paste0('split',i)

我希望这会输出“split1, split2, split3...”,然后在循环的下一部分中引用它。

requester_ids <- paste0(splitname, collapse = ",")

这应该提取包含在循环数据框名称中的数字,并用逗号分隔数字折叠。我知道的崩溃是有效的,因为我已经在循环之外多次使用了它。

最后,循环的最后一部分应该使用 url 变量并附加上一行中提取的所有 id 并以以下方式结束: "https://example.url/users/show_many/ids=11111,22222,33333...."

我认为问题出在第一行,它将数据框名称存储为字符,而不是变量名称。

我整天都在绞尽脑汁想如何解决这个问题,但我对循环很陌生,这超出了我的技能水平。

【问题讨论】:

  • splitname &lt;- paste0('split',i) 在每次迭代中只会创建一个字符串,因此requester_ids &lt;- paste0(splitname, collapse = ",") 什么都不做,因为没有多个字符串可以折叠。
  • 这是一个很好的观点。您对我如何修改循环以按预期工作有什么建议吗?

标签: r loops rstudio


【解决方案1】:

正如您所指出的,问题在于使用表的名称字符串,而不是表本身。你只需要'get'来让你的代码工作。

split1 <- 100:109
split2 <- 200:209
split3 <- 300:309
split4 <- 400:409
split5 <- 500:509
split6 <- 600:609
split7 <- 700:709
requester_url <- "https://example.url/users/show_many/ids="
for(i in 1:7) {
  splitname <- paste0('split',i)
  requester_ids <- paste0(get(splitname), collapse = ",")
  if (i>1) sep <- ',' else sep <- ''
  requester_url <- paste(requester_url,requester_ids,sep=sep)
}

但更好的解决方案是根本不做任何循环:首先合并(rbind)这 7 个数据集,然后折叠结果。

【讨论】:

  • 这很有效,但是我调整了 if 语句以满足我的需要。只是为了澄清我为什么要使用多个数据集——我与之交互的 API 有 100 条记录的限制,所以这 7 个数据集实际上是从一个更大的数据集拆分而来的。对于这个特定的 API 调用,没有分页,因此它需要使用拆分数据集进行多次调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 2020-05-25
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多