【问题标题】:Plot: Looping over nested data情节:循环嵌套数据
【发布时间】:2021-06-02 04:52:26
【问题描述】:

我目前遇到一个问题,我正在尝试将模拟数据嵌套在包含所有 250 个模拟的小标题内以实现有效边界。 tibble 将有 1 列名为“sim”,表示模拟的数量,即该列中的行从 1:250 开始。另一列应包含嵌套的模拟数据,每个模拟都是一个 3x123 的小标题。我已经成功地在这里的一个好人的帮助下,设法创建了这个包含有效边界的小标题。现在我需要在这个 tibble 中创建一个循环,并在一个图中绘制所有 250 个有效边界。

我已尝试复制问题,这样您就不需要所有以前的代码和数据来查看问题。在这个简单且可重复的示例中,我有一个 5x2 Tibble 表格,其中“sim”列列出了模拟 (1:5),“obs”包含一个带有一些坐标的单独 5x3 tibble:

library(tidyverse)
library(ggplot2)

counter = 0

table <- tibble(sim = 1:5, obs = NA)

for(i in (1:5)){
  counter = counter + 1
  tibble <- tibble(a = NA, b = 1:5, x = c(counter + 1), y = c(counter*2-1))
  tibble$a <- counter
  nested_tibble <- tibble %>% nest(data = -a) %>% select(-a)
  table$obs[i] <- nested_tibble[[1]]
}

for (i in (1:5)){
  print(ggplot()+
    geom_point( data = (table %>% filter(sim == i) %>% .$obs)[[1]],
                aes(x = x, y = y),
                color = "red",
                size = 4))
}

如前所述,我希望它在一个图中绘制所有 5 个坐标,以便我可以复制它来绘制 250 个有效边界。但是,当我运行代码时,它只返回最后一个坐标。

我希望我的表述是有意义的。如果您需要任何其他文件,请告诉我。

【问题讨论】:

    标签: r loops ggplot2 nested data-science


    【解决方案1】:

    我不确定,但这应该可以。我认为使用列表更好地存储嵌套结构。因此,下面的代码会返回一个名为 table_out 的列表。

    请看看这是不是你想要的。

    library(tibble)
    library(data.table)
    library(ggplot2)
    
    N_sim <- 5
    table_out <- vector("list", 5)
    
    for ( i in seq_len(N_sim) ) {
      current_table <- tibble(a = i, b = 1L:N_sim, x = i + 1, y = i*2 - 1)
      table_out[[ i ]] <- current_table
    }
    
    # this creates a data.table (like a data.frame) from a list
    final <- rbindlist( table_out )
    
    ggplot(final, aes(x, y)) +
      geom_point(color = "red", size = 4)
    

    reprex package (v1.0.0) 于 2021 年 3 月 3 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2019-12-17
      • 2015-05-08
      • 2023-01-11
      • 1970-01-01
      • 2022-05-12
      • 2014-06-21
      相关资源
      最近更新 更多