【问题标题】:Loop for nc code and arrange data row wise循环 nc 代码并按行排列数据
【发布时间】:2019-07-18 09:24:25
【问题描述】:

我有以下用于 nc 文件的代码。此代码为我的工作目录中存在的所有 netcdf 文件生成单独的 csv 文件。它明智地排列数据行。它跳过经度和纬度甚至名称或序列号并替换它V1,V2等。

谁能帮我解释一下为什么它不包括纬度/经度甚至序列号以及为什么它在第一行显示为 V1、V2、V3?

如何在 1 个 csv 文件中获取所有 nc 文件的数据。我的意思是单个 csv 输出文件应该包含顶部(第一)行 csv 的标题(站名或序列号,或者甚至是 V1、V2、...)和第 1 个 nc 文件数据的第 2 行,第 2 个 nc 文件数据的第 3 行,第 4 行用于第 3 个 nc 文件数据,依此类推。

我附上了输入 csv 的图片,其中包含 1 个 nc 文件的坐标和 1 个单个 csv 输出。

library(ncdf4)
library(raster)

setwd("F:\\research\\1_Rainfall\\CDC\\test")
files <- list.files(pattern="*.nc")
print(files)
ncname <- files[1:3]
ncfname <- paste(ncname, sep="")

library(raster)

dname <- "precip"  # note: variable precipitation or temperature

for(i in 1:3){
  ncin1 <- brick(ncfname[i])
  s = read.csv("F:\\research\\1_Rainfall\\CDC\\test\\Remaining_Points.csv", 
               stringsAsFactors = FALSE)
  coordinates(s)= ~lon + lat 
  e <- extract(ncin1, s)

  ts1 <- round((e),1)
  df <- as.data.frame(t(ts1))

  write.csv(df, 
            file = paste0("F:\\research\\1_Rainfall\\CDC\\test\\precip", i, ".csv"), 
            append=FALSE, sep= ",", row.names = TRUE, col.names=TRUE)
}

【问题讨论】:

    标签: r loops csv netcdf netcdf4


    【解决方案1】:

    当您提出问题时,请提供一个简单的可重现示例。并尝试将您的问题分成几部分。您有两个问题(1)如何存储按行提取的数据,以及(2)如何附加到文件中。我会回答 #1,因为您可能不需要 #2。

    files <- rep(system.file("external/rlogo.grd", package="raster"), 3)
    xy <- matrix(c(48, 48, 48, 53, 50, 46, 54, 70, 84, 85, 74, 84, 95, 85, 
       66, 42, 26, 4, 19, 17, 7, 14, 26, 29, 39, 45, 51, 56, 46, 38, 31, 
       22, 34, 60, 70, 73, 63, 46, 43, 28), ncol=2)
    stations <- letters[1:nrow(xy)]
    
    d <- data.frame(t(xy))
    colnames(d) <- station
    d <- cbind(file="", var=c("x", "y"), d)
         
    for(i in 1:length(files)){
        nc <- brick(files[i])
        e <- t(extract(nc, xy))
        colnames(e) <- stations
        v <- data.frame(file=basename(files[i]), var=names(nc), e)
        d <- rbind(d, v)
    }
    rownames(d) <- NULL
    d
    write.csv(d, outf)
    

    你的代码,稍微清理一下,可能看起来像这样:

    库(ncdf4) 图书馆(光栅)

    files <- list.files(pattern="*.nc")
    library(raster)
    s <- read.csv("Remaining_Points.csv", stringsAsFactors = FALSE)
    xy <- s[, c("lon", "lat")]
    stations <- s$stationname
    
    for(i in 1:length(files)){
      nc <- brick(files[i])
      e <- t(round(extract(nc, xy), 1))
    
      # etc
    }
     
    

    【讨论】:

    • 先生,我有一年内每天降水的 nc 文件。我编写的代码使用坐标(csv 文件)提取值,并每天输出 csv 文件,第一行为 V1、V2、V3,第二行为值。这里 V1、V2、V3 代表站(坐标)我希望输出应该是单个 csv 文件,其顶行为 V1、V2、V3,并且在 csv 的下一行中应该有数据。意味着在第 2 行应该有第 1 个 nc 文件的数据,第 3 行应该有第 2 个 nc 文件的数据......在第 366 行应该有第 365 个 nc 文件的值。我想要单个 csv 输出,拜托。
    • 先生,我试过这个文件
    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多