从值和计数属性聚合数据

时间:2017-05-29 13:41:30

标签: r aggregate classification histogram

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

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()的参数中定义的聚合值和计数。但是,这会产生太大的向量(每个向量一些Gb),R无法再处理。我感谢任何解决方案或提示!

1 个答案:

答案 0 :(得分:0)

我并不完全确定我能正确理解你的问题,但这可能会解决你的问题,或者至少指出你的方向。我列出了数据框,然后生成一个新列,其中包含使用binfunction包中的mappurrr应用于每个数据框的结果。

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到&lt; 1200等。我想你可以根据你的需要调整binfunction