从文本文件中读取数据并将其与r

时间:2016-06-18 21:52:36

标签: r dataframe ftp data-extraction

我从互联网上下载了数据。我想提取数据并创建数据框。您可以在以下过滤数据集链接中找到数据:http://www.esrl.noaa.gov/gmd/dv/data/index.php?category=Ozone&type=Balloon。在9个过滤数据集的网站页面底部,您可以选择任何工作站。 Say Suva,斐济(SUV):

我编写了以下代码来创建一个数据框,该数据框的启动日期是每个文件数据框的一部分。

    setwd("C:/Users/")
    path = "~C:/Users/"
    files <- lapply(list.files(pattern = '\\.l100'), readLines) 
    test.sample<-do.call(rbind, lapply(files, function(lines){
      data.frame(datetime = as.POSIXct(sub('^.*Launch Date : ', '', lines[grep('Launch Date :', lines)])),
                 # and the data, read in as text
                 read.table(text = lines[(grep('Sonde Total', lines) + 1):length(lines)]))
    }))

文件来自FTP服务器。即使我用.txt尝试过,文件的模式看起来也不熟悉,但它不起作用。你可以调整上面的代码或任何其他代码来获取数据框。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

我认为问题在于搜索字符串不匹配&#34;发布日期:&#34;与文件中的内容不匹配(至少是我检查过的文件)。

这应该有效

lines <- "Launch Date    : 11 June 1991"
lubridate::dmy(sub('^.*Launch Date.*: ', '', lines[grep('Launch Date', lines)]))

如果将问题分解为步骤而不是一句话

,代码可能会更容易调试

答案 1 :(得分:0)

我采取了以下方法:

td <- tempdir()
setwd(td)

ftp <- 'ftp://ftp.cmdl.noaa.gov/ozwv/Ozonesonde/Suva,%20Fiji/100%20Meter%20Average%20Files/'
files <- RCurl::getURL(ftp, dirlistonly = T)
files <- strsplit(files, "\n")
files <- unlist(files)

dat <- list()
for (i in 1:length(files)) {
  download.file(paste0(ftp, files[i]), 'data.txt')
  df <- read.delim('data.txt', sep = "", skip = 17)
  ld <- as.character(read.delim('data.txt')[9, ])
  ld <- strsplit(ld, ":")[[1]][2]
  df$launch.date <- stringr::str_trim(ld)
  dat[[i]] <- df ; rm(df)
}