在R中,我有一大堆大型数据框,包含两列value
和count
。我在上一步中使用的函数返回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无法再处理。我感谢任何解决方案或提示!
答案 0 :(得分:0)
我并不完全确定我能正确理解你的问题,但这可能会解决你的问题,或者至少指出你的方向。我列出了数据框,然后生成一个新列,其中包含使用binfunction
包中的map
将purrr
应用于每个数据框的结果。
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
。