簡體   English   中英

使用R中的多個源的ReadLines

[英]ReadLines using multiple sources in R

我正在嘗試使用readLines()刮擦人口普查托管的.txt文件,並將它們編譯為一個.txt / .csv文件。 我可以使用它來讀取單個頁面,但是我想擁有它,這樣我就可以運行一個函數,該函數將基於帶有url的csv運行out和readLines()。

我對循環和函數屬性的知識不是很豐富,但是下面是我嘗試合並的代碼片段:

這是我建立網址矩陣的方法,可以將它們添加到和/或變成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”矩陣/ csv中擁有的3個URL的累積,同時從第一個文件中刪除所有文件中除所有人口普查的內置標頭(標頭與bodclipped )。

我嘗試用readLines對lapply()進行“ urls”處理,但是它僅基於最后一個url而不是所有三個url生成文本,並且它們仍然具有每個文本文件的標頭,我可以將其刪除然后重新附加到末尾。

任何幫助,將不勝感激!

由於所有這些文檔都是38列的csv文件,因此您可以使用以下命令輕松合並:

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)填充它們: read.csv(urls[i], skip = 3, header = FALSE) 因此raw_dat是一個包含3個data.frames的列表,其中包含您的數據。 do.call(rbind, dat)將em綁定在一​​起。

標題行的接縫以某種方式折斷了,這就是為什么我使用skip = 3, header = FALSE ,它等效於您的bod[-c(1,2,3)]

如果所有抓取的數據都適合內存,則可以通過以下方式將其合並,最后使用以下命令將其寫入文件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM