将包含多个列表的嵌套数据框转换为可用的 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)
我正在使用 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)