如何保留站点 ID
How do I retain a site id
我有一个包含列 id、纬度、经度的数据框。我需要找到附近的气象站并使用 RNOAA 下载数据。第一步是使用 meteo_nearby_stations 获取站名,然后使用 meteo_pull_monitors.
下载数据
我的问题是,如何在 meteo_pull_monitors 的结果中保留来自 df 的站点 ID?
desired result can be seen here
library(rnoaa)
id<-c("07227500", "07308500", "07311700")
latitude<-c(35.47033,34.11009, 33.82064)
longitude<-c(101.87963,98.53172,-99.78648)
df<-data.frame(id,latitude,longitude)
met_test<-meteo_nearby_stations(df, lat_colname = "latitude",
lon_colname = "longitude", station_data = ghcnd_stations(),
var = c("TMAX","TMIN"), year_min = NULL, year_max = NULL,
radius = 200, limit = 3)
met_test_df<-do.call(rbind, lapply(met_test,as.data.frame))
met_id<-as.vector(met_test_df$id)
met_data<-meteo_pull_monitors(met_id, var = c("date","TMAX","TMIN"), date_min = "2020-01-01", date_max = "2020-06-01")
我们可以通过提取 met_test
列表中每个元素的名称,将 site_id
数据加入到 meteo_nearby_stations()
函数的结果中。
library(rnoaa)
id<-c("07227500", "07308500", "07311700")
latitude<-c(35.47033,34.11009, 33.82064)
longitude<-c(101.87963,98.53172,-99.78648)
df<-data.frame(id,latitude,longitude)
met_test<-meteo_nearby_stations(df, lat_colname = "latitude",
lon_colname = "longitude", station_data = ghcnd_stations(),
var = c("TMAX","TMIN"), year_min = NULL, year_max = NULL,
radius = 200, limit = 3)
幸运的是,met_list
的每个元素都包含与 meter_nearby_stations()
请求关联的 site_id
的名称。我们可以使用 names()
函数访问此信息。
> names(met_test)
[1] "07227500" "07308500" "07311700"
>
为了合并站点标识符,我们修改了原始 post 中的 do.call()
函数,以将 lapply()
包含在一个匿名函数中,该函数将列表中的正确名称分配给列我们命名为 site_id
。请注意,为了遍历数据帧列表并访问它们的名称,我们使用向量 1:length(met_test)
来驱动 lapply()
函数,并将 met_test
作为第二个参数包含在内,因此我们可以使用索引号 x
来访问正确的列表元素及其名称。
met_test_df<-do.call(rbind, lapply(1:length(met_test),function(x,y){
data <- as.data.frame(y[[x]])
# note individual data frames already have an ID variable
data$site_id <- names(y)[x]
data
},met_test))
met_test_df
...以及输出:
> met_test_df
id name latitude longitude distance site_id
1 CHM00052955 GUINAN 35.5830 100.7500 102.990626 07227500
2 CHM00056080 HEZUO 35.0000 102.9000 106.410602 07227500
3 CHM00052957 TONGDE 35.2700 100.6500 113.695195 07227500
4 CHM00056033 MADOI 34.9170 98.2170 94.243943 07308500
5 CHM00056046 DARLAG 33.7500 99.6500 110.669503 07308500
6 CHM00056029 YUSHU 33.0000 96.9670 190.415441 07308500
7 USC00419163 TRUSCOTT 3 W 33.7569 -99.8617 9.927467 07311700
8 USC00411995 COPPER BREAKS SP 34.1122 -99.7430 32.667020 07311700
9 USC00417572 RHINELAND 33.5333 -99.6500 34.356103 07311700
>
此时我们可以提取单个监视器数据,并通过监视器 ID 合并 site_id
编号。首先,我们提取监控数据。
met_id<-as.vector(met_test_df$id)
met_data<-meteo_pull_monitors(met_id, var = c("date","TMAX","TMIN"), date_min = "2020-01-01", date_max = "2020-06-01")
然后,我们合并站点标识符数据。
sites <- met_test_df[,c("id","site_id")]
mergedData <- merge(met_data,sites)
最后,我们打印结果数据框的前几行。
head(mergedData)
id date tmax tmin site_id
1 CHM00052955 2020-01-01 81 -193 07227500
2 CHM00052955 2020-01-02 81 -163 07227500
3 CHM00052955 2020-01-03 54 -155 07227500
4 CHM00052955 2020-01-04 62 -127 07227500
5 CHM00052955 2020-01-05 62 -149 07227500
6 CHM00052955 2020-01-06 3 -216 07227500
>
我有一个包含列 id、纬度、经度的数据框。我需要找到附近的气象站并使用 RNOAA 下载数据。第一步是使用 meteo_nearby_stations 获取站名,然后使用 meteo_pull_monitors.
下载数据我的问题是,如何在 meteo_pull_monitors 的结果中保留来自 df 的站点 ID?
desired result can be seen here
library(rnoaa)
id<-c("07227500", "07308500", "07311700")
latitude<-c(35.47033,34.11009, 33.82064)
longitude<-c(101.87963,98.53172,-99.78648)
df<-data.frame(id,latitude,longitude)
met_test<-meteo_nearby_stations(df, lat_colname = "latitude",
lon_colname = "longitude", station_data = ghcnd_stations(),
var = c("TMAX","TMIN"), year_min = NULL, year_max = NULL,
radius = 200, limit = 3)
met_test_df<-do.call(rbind, lapply(met_test,as.data.frame))
met_id<-as.vector(met_test_df$id)
met_data<-meteo_pull_monitors(met_id, var = c("date","TMAX","TMIN"), date_min = "2020-01-01", date_max = "2020-06-01")
我们可以通过提取 met_test
列表中每个元素的名称,将 site_id
数据加入到 meteo_nearby_stations()
函数的结果中。
library(rnoaa)
id<-c("07227500", "07308500", "07311700")
latitude<-c(35.47033,34.11009, 33.82064)
longitude<-c(101.87963,98.53172,-99.78648)
df<-data.frame(id,latitude,longitude)
met_test<-meteo_nearby_stations(df, lat_colname = "latitude",
lon_colname = "longitude", station_data = ghcnd_stations(),
var = c("TMAX","TMIN"), year_min = NULL, year_max = NULL,
radius = 200, limit = 3)
幸运的是,met_list
的每个元素都包含与 meter_nearby_stations()
请求关联的 site_id
的名称。我们可以使用 names()
函数访问此信息。
> names(met_test)
[1] "07227500" "07308500" "07311700"
>
为了合并站点标识符,我们修改了原始 post 中的 do.call()
函数,以将 lapply()
包含在一个匿名函数中,该函数将列表中的正确名称分配给列我们命名为 site_id
。请注意,为了遍历数据帧列表并访问它们的名称,我们使用向量 1:length(met_test)
来驱动 lapply()
函数,并将 met_test
作为第二个参数包含在内,因此我们可以使用索引号 x
来访问正确的列表元素及其名称。
met_test_df<-do.call(rbind, lapply(1:length(met_test),function(x,y){
data <- as.data.frame(y[[x]])
# note individual data frames already have an ID variable
data$site_id <- names(y)[x]
data
},met_test))
met_test_df
...以及输出:
> met_test_df
id name latitude longitude distance site_id
1 CHM00052955 GUINAN 35.5830 100.7500 102.990626 07227500
2 CHM00056080 HEZUO 35.0000 102.9000 106.410602 07227500
3 CHM00052957 TONGDE 35.2700 100.6500 113.695195 07227500
4 CHM00056033 MADOI 34.9170 98.2170 94.243943 07308500
5 CHM00056046 DARLAG 33.7500 99.6500 110.669503 07308500
6 CHM00056029 YUSHU 33.0000 96.9670 190.415441 07308500
7 USC00419163 TRUSCOTT 3 W 33.7569 -99.8617 9.927467 07311700
8 USC00411995 COPPER BREAKS SP 34.1122 -99.7430 32.667020 07311700
9 USC00417572 RHINELAND 33.5333 -99.6500 34.356103 07311700
>
此时我们可以提取单个监视器数据,并通过监视器 ID 合并 site_id
编号。首先,我们提取监控数据。
met_id<-as.vector(met_test_df$id)
met_data<-meteo_pull_monitors(met_id, var = c("date","TMAX","TMIN"), date_min = "2020-01-01", date_max = "2020-06-01")
然后,我们合并站点标识符数据。
sites <- met_test_df[,c("id","site_id")]
mergedData <- merge(met_data,sites)
最后,我们打印结果数据框的前几行。
head(mergedData)
id date tmax tmin site_id
1 CHM00052955 2020-01-01 81 -193 07227500
2 CHM00052955 2020-01-02 81 -163 07227500
3 CHM00052955 2020-01-03 54 -155 07227500
4 CHM00052955 2020-01-04 62 -127 07227500
5 CHM00052955 2020-01-05 62 -149 07227500
6 CHM00052955 2020-01-06 3 -216 07227500
>