【问题标题】:How can I write parts of a list into one data frame?如何将列表的一部分写入一个数据框中?
【发布时间】:2019-02-22 14:24:32
【问题描述】:

我想编写一个频率为 150 个光栅对象的 df (部分回答: Count freq of multiple raster objects in R)

我已经创建了一个包含所有光栅文件的列表

spatial.tools::list.raster.files() 然后调用

lapply(ls$raster,freq)

现在我有一个包含 150 个条目的列表,其中包含每个光栅文件的频率矩阵。

我只对$Band.1[,"count"]) 感兴趣。 对于列表的单个条目,我可以使用

创建计数的 df
as.data.frame(all[[1]]$Band.1[,"count"])

我的问题是: 如何将列表中的所有 150 个 $Band.1[,"count"] 一次性写入单个 df ???

【问题讨论】:

    标签: r list loops r-raster


    【解决方案1】:

    我知道你是新来的。如果您可以使您的问题可重现,其他人将更容易回答您的问题——查看how to make a great reproducible example 上的这篇文章。话虽如此,使用您的其他问题,这可能会为您提供所需的内容:

    library(tidyverse)
    
    list_of_results <- lapply(ls$raster,freq)
    
    df_of_results <- 
      list_of_results %>%
      map_df(~ data.frame(.))
    
    df_of_results$count
    

    如果您不喜欢 tidyversepurrr::map 函数,您还可以执行以下操作:

    results <- unlist(lapply(list_of_results, function(x) x[, c("count")]))
    

    【讨论】:

    • 你是对的,我是新来的。感谢您的建议,我将尝试将其合并。 df_of_results &lt;- list_of_results %&gt;% map_df(~ data.frame(.)) 工作得很好。 results &lt;- unlist(lapply(list_of_results, function(x) x[, c("count")])) 抛出此错误:“x[, c("count")] 中的错误:维数不正确”
    • 另一个问题是第一个解决方案的输出是一个数据框,其中包含四个不同值的单列。purr::mapfunction 是否提供了一种使其成为 4 列而不是单列的方法一个?
    • @loening 我认为对于所有这些问题,其他人帮助您提供可重现的示例真的会更容易。使用虚假/虚拟数据来说明您的问题、您尝试过的内容以及您期望的输出结果。
    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2019-03-23
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2015-11-07
    相关资源
    最近更新 更多