将包含多个列表的嵌套数据框转换为可用的 dataframe/tibble

converting a nested data frame containing multiple lists into a useable dataframe/tibble

我正在使用 R 中的一个包,它为我在 csv 文件中提供的网站列表输出天气变量。数据以包含多个列表的数据框形式出现,因此每个站点一个。在每个站点的每个列表中,都有有关站点名称、纬度、经度、海拔高度和方块的信息,以及该站点的数据,这是一个包含 9 个变量的数据框。最好通过 运行 此处的代码查看输出:

library(tidyverse)
if(!require(devtools)){install.package(devtools)}
devtools::install_github("khufkens/daymetr")
library(daymetr)

下面的 'my_sites.csv' 看起来像这样,其中没有列标题,只有网站名称和经纬度(总共 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 年的数据,所有网站都会绑定在一起。

使用 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)