如何在 R 中的分箱数据上收集额外的行数据

How collect additional row data on binned data in R

我想将一个 data.frame 列的值排序到预定的 bin 中,然后对同一行中的值求和,但我尝试做的另一个 column.What 是对数据框进行排序根据一个值将项目列到箱子中,然后获得附加到箱子中所有项目的项目的第二个值的总和。有人可以帮助我吗?

我的数据是这样的

df =

 Item              valueX        valueY     
A                 169849631      0.9086560 
B                  27612064      0.9298379 
C                 196651878      1.6516654 
D                  33007984      1.3397873 
E                  23019448     -0.2954385 
F                  54779712     -1.6888178

我的垃圾箱是这样的

Bins=
start                end
     1               249982
249983               499963
499964               749945
749946               999926
999927              1249907
1249908              1499889

我想要一个看起来像这样的数据框(频率和 sumvalueY 列中的假设值)

resultsdf=
    binstart             binend       frequency       sumvalueY 
          1               249982             0               0
     249983               499963             5             200
     499964               749945             6             400 
     749946               999926             0               0
     999927              1249907            12              30
    1249908              1499889             0               0

这是我的代码(当前迭代)

Start = Bins[,1]

End = Bins[,2]

myfunction <- function(Start,End) {
  sum(df$valueX >= Start & df$valueX < End, df[,2])}

Binssorted = mapply(myfunction, Start,End)

有多种方法可以做到这一点。这是一个使用 dplyr 包的方法。我创建了一些假数据以供说明。

library(dplyr)

# Fake data
set.seed(5) # For reproducibility
dat = data.frame(valueX = runif(1000, 1, 2e6), valueY = rnorm(1000))

现在我们将对数据进行分箱并使用管道运算符%>%对其进行汇总,这使我们可以一个接一个地链接函数,因此我们可以一次性执行所有操作。

dat %>% 
  # Bin the data
  mutate(bins = cut(valueX, seq(0, 2e6, 250000))) %>%
  # Group data into the bins we just created
  group_by(bins) %>%
  # Count the number of rows in each bin and sum all the Y values in each bin
  summarise(freq = n(),
            sumY = sum(valueY))

                bins  freq       sumY
1        (0,2.5e+05]   127   8.404150
2    (2.5e+05,5e+05]   127  14.988207
3    (5e+05,7.5e+05]   121  10.750580
4    (7.5e+05,1e+06]   134 -28.725949
5   (1e+06,1.25e+06]   106  17.377665
6 (1.25e+06,1.5e+06]   126  14.340313
7 (1.5e+06,1.75e+06]   119  -4.241991
8   (1.75e+06,2e+06]   140   9.312233