【问题标题】:Aggregating data from value and count attributes从值和计数属性聚合数据
【发布时间】:2017-05-29 13:41:29
【问题描述】:

在 R 中,我有一个大型数据框列表,包含两列 valuecount。我在上一步中使用的函数返回value 中的观察值,对应的列count 显示该特定值已被观察到的次数。以下代码生成 one 数据框作为示例 - 但是列表中的所有数据框确实具有不同的值。取值范围:

d <- as.data.frame(
  cbind(
    value = runif(n = 1856, min = 921, max = 4187),
    count = runif(n = 1856, min = 0, max = 20000)
  )
)

现在我想汇总数据以创建可视化的可视化。此聚合应应用于列表中的所有数据帧,每个数据帧都有不同的值范围。我正在寻找一个函数,将数据切割成新的值和计数,有点像直方图函数。因此,例如,对于值从 0 到 100 的所有数据,应将计数求和(依此类推,在定义的区间内,以干净的区间边界起点(如 0)为起点)。

我的第一次尝试是创建一个简单的值向量,其中每个值重复的次数由count 字段确定。然后,下一步将应用hist() 函数而不进行绘图以获得可以在hist() 的参数中定义的聚合值和计数。但是,这会产生 R 无法再处理的太大向量(每个 Gb)。我感谢任何解决方案或提示!

【问题讨论】:

    标签: r aggregate classification histogram


    【解决方案1】:

    我不完全确定我是否正确理解了您的问题,但这可能会解决您的问题或至少为您指明方向。我制作了一个数据帧列表,然后生成一个新列,其中包含使用purrr 包中的mapbinfunction 应用于每个数据帧的结果。

    library(tidyverse)
    
    d1 <- d2 <- tibble(
      value = runif(n = 1856, min = 921, max = 4187),
      count = runif(n = 1856, min = 0, max = 20000)
    )
    
    d <- tibble(name = c('d1', 'd2'), data = list(d1, d2))
    
    binfunction <- function(data) {
      data %>% mutate(bin = value - (value %% 100)) %>% 
        group_by(bin) %>% 
        mutate(sum = sum(count)) %>% 
        select(bin, sum)
    }
    
    d_binned <- d %>% 
      mutate(binned = map(data, binfunction)) %>% 
      select(-data) %>% 
      unnest() %>% 
      group_by(name, bin) %>% 
      slice(1L)
    
    d_binned
    #> Source: local data frame [66 x 3]
    #> Groups: name, bin [66]
    #> 
    #> # A tibble: 66 x 3
    #>     name   bin      sum
    #>    <chr> <dbl>    <dbl>
    #>  1    d1   900 495123.8
    #>  2    d1  1000 683108.6
    #>  3    d1  1100 546524.4
    #>  4    d1  1200 447077.5
    #>  5    d1  1300 604759.2
    #>  6    d1  1400 506225.4
    #>  7    d1  1500 499666.5
    #>  8    d1  1600 541305.9
    #>  9    d1  1700 514080.9
    #> 10    d1  1800 586892.9
    #> # ... with 56 more rows
    
    d_binned %>% 
      ggplot(aes(x = bin, y = sum, fill = name)) +
      geom_col() + 
      facet_wrap(~name)
    

    请参阅this comment 了解我的分箱灵感。它将数据分组为 100 个组,例如bin 1100 代表 1100 到 binfunction。

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 2021-05-05
      • 2021-03-21
      • 1970-01-01
      • 2017-01-28
      • 2021-07-17
      • 2016-12-25
      • 2017-01-20
      • 2015-01-18
      相关资源
      最近更新 更多