ReadLines 在 R 中使用多个源

ReadLines using multiple sources in R

我正在尝试使用 readLines() 来抓取人口普查托管的 .txt 文件,并将它们编译成一个 .txt/.csv 文件。我可以用它来阅读单独的页面,但我想拥有它,这样我就可以 运行 一个函数,该函数将根据带有 urls 的 csv 和 readLines() 输出。

我对循环和函数属性的了解不是很好,但这里是我尝试合并的代码片段:

以下是我构建 url 矩阵的方法,我可以将其添加到 and/or 变成 csv 并让函数以这种方式读取它。

MasterList <- matrix( data = c("%20Region/ne0001y.txt", "%20Region/ne0002y.txt", "%20Region/ne0003y.txt"), ncol = 1)
urls <- sprintf("http://www2.census.gov/econ/bps/Place/Northeast%s", MasterList)

这是我开始编写的函数(充满问题):

Scrape <- function(x){
  for (i in x){
      URLS <- i
      headers <- readLines(URLS, n=2)
      bod <- readLines(URLS)
      bodclipped <- bod[-c(1,2,3)]
      Totes <- c(headers, bodclipped)
      write(Totes, file = "[Directory]/ScrapeTest.txt")
      return(head(Totes))
  }
}

我的想法是 运行 Scrape(urls) 这将生成我 "urls" [=] 中的 3 urls 的累积29=] 并从除第一个文件之外的所有文件中删除 headers 中的人口普查(headers 与 bodclipped)。

我试过用 readLines 做 lapply() 到 "urls" 但它只生成基于最后一个 url 而不是所有三个的文本,他们仍然有 headers 对于每个我可以删除然后在最后重新附加的文本文件。

如有任何帮助,我们将不胜感激!

由于所有这些文档都是 csv 包含 38 列的文件,您可以使用以下方法轻松合并:

MasterList <- c("%20Region/ne0001y.txt", "%20Region/ne0002y.txt", "%20Region/ne0003y.txt")
urls <- sprintf("http://www2.census.gov/econ/bps/Place/Northeast%s", MasterList)

raw_dat <- lapply(urls, read.csv, skip = 3, header = FALSE)
dat <- do.call(rbind, dat_raw)

这里发生了什么,这是如何循环的? lapply 函数基本上创建了一个包含 3 (= length(urls)) 个条目的列表,并用 read.csv(urls[i], skip = 3, header = FALSE) 填充它们。所以 raw_dat 是一个包含 3 data.frames 的列表,其中包含您的数据。 do.call(rbind, dat) 将它们绑定在一起。

header 行接缝不知何故断了,这就是为什么我使用 skip = 3, header = FALSE,这相当于你的 bod[-c(1,2,3)]

如果所有抓取的数据都适合内存,您可以通过这种方式组合它们,最后使用以下方法将其写入文件:

write.csv(dat, "[Directory]/ScrapeTest.txt")