计算大数据帧 R 中 20 组的分位数

Calculating quantiles in groups of 20 in large data frame R

我正在尝试为一个非常大的数据集(超过 40,000 行)计算每组 20 行的分位数。我还希望将结果写入一个 .csv 文件。

我可以使用这样的切片符号来计算我需要的内容:

    my_data<-read.csv(file.choose(),header=TRUE)

    q1<-my_data[1:20,"Q"]
    q2<-my_data[21:40,"Q"]

    quant1<-quantile(q1,c(0.5,0.75,0.8,0.9,0.95))
    quant2<-quantile(q2,c(0.5,0.75,0.8,0.9,0.95))

    d=data.frame(quant1,quant2)

    write.csv(d,file="q_values.csv")

然而,为整个数据集重写这些行将变得极其麻烦和耗时。我想以某种方式遍历数据,以便它计算每 20 行我需要的内容,但我似乎无法理解如何执行此操作。我已经阅读了 R 中 "for" 循环的帮助文件,但在编码方面我仍处于新手水平,非常感谢有关如何执行此操作的一些指导。谢谢

如果您添加一个列作为索引依据,您可以很容易地做到这一点。这是一个使用 data.table.

的例子
dat <- data.table(Q = rnorm(40000))
dat[, R := rep(1:(.N/20), each = 20)]
dat[, .(quant_0.5 = quantile(Q, probs = c(0.5)),
        quant_0.75 = quantile(Q, probs = c(0.75)),
        quant_0.8 = quantile(Q, probs = c(0.8)),
        quant_0.9 = quantile(Q, probs = c(0.9)),
        quant_0.95 = quantile(Q, probs = c(0.95))), 
    by = R]

给出结果:

         R    quant_0.5 quant_0.75 quant_0.8 quant_0.9 quant_0.95
   1:    1 -0.123822327  0.4609870 0.5784939 1.0898441  1.1224632
   2:    2 -0.251293742  0.3701377 0.7802016 1.0747215  1.5514140
   3:    3 -0.070979910  0.4268033 0.5546480 1.4477840  1.5304469
   4:    4  0.177552739  0.8687846 1.0001809 1.3883132  1.5394739
   5:    5  0.515836825  0.9611607 1.1268148 1.3396512  1.5087827
  ---                                                            
1996: 1996  0.566311407  1.0667204 1.3171846 1.5641837  1.8594775
1997: 1997  0.009336622  0.2859035 0.3397875 0.5472635  0.8108932
1998: 1998  0.514867828  1.0330679 1.0534716 1.2528384  2.0933062
1999: 1999  0.247092220  0.7501609 0.8924200 1.1446394  1.4736887
2000: 2000 -0.076496868  0.6816951 0.7430764 0.8362260  1.1001702