【问题标题】:converting a nested data frame containing multiple lists into a useable dataframe/tibble将包含多个列表的嵌套数据框转换为可用的数据框/小标题
【发布时间】:2017-11-16 18:42:25
【问题描述】:

我正在使用 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 年的数据,所有站点都会绑定在一起。

【问题讨论】:

  • 我能够将示例 csv 保存在我自己的桌面上并运行它,但我遇到了包含数据的问题,download_daymet_batch() 返回有关 Delta 站点坐标的错误。我在下面的回答假设这是一个单独的数据问题,这里的问题是如何提取/整理结果数据。

标签: r dataframe data.table tidyverse


【解决方案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) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2020-06-22
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    相关资源
    最近更新 更多