【问题标题】:R: Extract data from several files based on X,YsR:根据X,Ys从多个文件中提取数据
【发布时间】:2019-08-19 21:54:21
【问题描述】:

我在 R 中有一个数据框 df,其中包含 X、Y UTM 坐标。示例数据如下所示:

ID   X        Y
1    333229   6580393
2    333229   6580500
3    333229   6581500
4    325889   6584200
...

上述(和其他)X、Ys 的每小时风速和风向数据位于包含多年气象数据(1995 - 2011 年,超过 100,000 个 .dat 文件)的目录中。例如,每个名为 "hourly_333229_6580393_2010.dat" 的文件都包含一年的每小时数据,如下所示:

Day   Month   Year   hour   w_speed   w_dir
1     1       2010   1      5.02      247.55
2     1       2010   2      2.6       320.12
3     1       2010   3      3         315.25

从这个目录中,我想以下列方式提取上述 X、Y 和 2005 年 5 月 1 日至 2005 年 7 月 31 日期间的每小时风速和风向数据:

ID   Year   Month   Day   hour   X        Y         w_speed  w_dir
1    2005   5       1     1      333229   6580393   2.01     120
2    2005   5       1     2      333229   6580393   5.2      370
3    2005   5       1     3      333229   6580393   1.5      115
...

如何以优化的方式使用R 实现这一目标?任何帮助/建议将不胜感激。

【问题讨论】:

  • 在气候数据方面,通常使用 .TIFF 或 .nc 文件。如果您手头有这些,我建议您遵循 Santander MetGroups 方法:github.com/SantanderMetGroup/climate4R
  • 嘿,谢谢你的建议,一定会看看的。

标签: r


【解决方案1】:

首先,我建议创建一个函数来打开每个 dat 文件。请将read.table 函数替换为您用于打开 dat 文件的函数。在这种情况下,该函数包含坐标和月份,它将数据框过滤为参数。然而,例如,参数可以按年和天延长。为简单起见,我只包括了几个月。

open_dat <- function(X, Y, left, right) {

dat <- read.table(paste("hourly", X, Y, "2005.dat", sep = "_"), 
           header=TRUE) %>% as.tibble()
dat$X <- X
dat$Y <- Y

dat %>% filter(between(Month, left, right))

}

然后,我们可以将该函数应用于包含 5 月和 7 月之间日期(数字 5 和 7)的 X 和 Y 的数据框:


full_df <- map2_dfr(df$X, df$Y, open_dat, left = 5, right =7)


【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多