在大数据帧R

时间:2017-06-27 21:05:28

标签: r iteration quantile

我正在尝试以非常大的数据集(超过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行需要的内容,但我似乎无法理解如何执行此操作。我已经阅读了&#34; for&#34;的帮助文件。在R中循环,但在编码方面,我仍然处于新手级别,并且非常欣赏有关如何执行此操作的一些指导。谢谢

1 个答案:

答案 0 :(得分:2)

如果您为索引添加列,则可以非常轻松地执行此操作。以下是使用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