我正在使用R中的一个程序包,它会为我在csv文件中提供的站点列表中的天气变量进行吐出。数据以包含多个列表的数据框形式出现,因此每个站点都有一个列表。在每个站点的每个列表中,都有关于站点名称,纬度,长度,高度和磁贴的信息,该站点的数据是包含9个变量的数据框。通过在此处运行代码来查看输出可能是最好的:
library(tidyverse)
if(!require(devtools)){install.package(devtools)}
devtools::install_github("khufkens/daymetr")
library(daymetr)
' my_sites.csv'下面看起来像这样,这里没有列标题,只有站点名称和lat long(总共3列):
Alpha 43.29515 -89.29077
Delta 44.14667 -121.34722
weather_by_site<-download_daymet_batch(file_location = '/Users/Jay/Desktop/my_sites.csv',
start = 2012,
end = 2016,
internal = TRUE)
这可以让您更好地了解输出结果:
str(weather_by_site)
我希望将输出与9个天气变量与每个站点的站点名称和磁贴相结合。目标是运行相同的代码但是对于> 600个站点,并且能够以更整洁的数据帧或tibble格式分析数据。所以基本上我会从2012-2016获得一个站点的数据,并且所有站点都将绑定在一起。
答案 0 :(得分:1)
使用purrr,我们可以遍历每个结果,从结果中获取数据帧,然后将其他变量推送到该数据帧的末尾:
library(dplyr)
library(purrr)
# write a function to do pull out the data frame
# then append the other values
tidyweather <- function(x) {
datadf <- pluck(x, "data")
datadf$site <- x[[1]]
datadf$lattitude <- x[[2]]
datadf$longitude <- x[[3]]
datadf$altitude <- x[[4]]
datadf$tile <- x[[5]]
return(datadf)
}
weather_df <- weather_by_site %>%
# run tidyweather() on each result and return one big data frame
map_df(tidyweather)