数据帧中所有列的子集小于R中的某个值

时间:2013-12-06 05:19:00

标签: r subset bin

我有一个包含7个p值变量的数据框。 我不能发布它,因为它是私人数据,但它看起来像这样:

>df
    o           m           l           c           a           aa          ep
    1.11E-09    4.43E-05    0.000001602 4.02E-88    1.10E-43    7.31E-05    0.00022168
    8.57E-07    0.0005479   0.0001402   2.84E-44    4.97E-17    0.0008272   0.000443361
    0.00001112  0.0005479   0.0007368   1.40E-39    3.17E-16    0.0008272   0.000665041
    7.31E-05    0.0006228   0.0007368   4.59E-33    2.57E-13    0.0008272   0.000886721
    8.17E-05    0.002307    0.0008453   4.58E-18    5.14E-12    0.0008336   0.001108402

每列的值均为0-1。 我想通过提取每列中小于0.009的所有值并创建一个新的数据帧来对整个数据帧进行子集化。如果我在这种条件下提取,那么列的长度会有很大差异。例如。 c有290个小于0.009的值,o有300,aa有500等。

我试过了:

subset(df,c<0.009 & a<0.009 & l<0.009 & m<0.009& aa<0.009 & o<0.009)

当我这样做时,我最终会得到一个非常少数的偶数列而不是我想要的,我希望每列中的所有值都符合数据中的子集标准。

然后我想使用这个数据框并使用类似summary(cut())函数的方法将其分成p值范围组,但我不知道该怎么做。

基本上我希望有一个最终数据框,其中包含每个变量的每个p值bin中的值的数量:

                o#   m# l#  c#  a#  aa# ep#
0.00-0.000001   545 58  85  78  85  45  785
0.00001-000.1   54  77  57  57  74  56  58
0.001-0.002 54  7   5   5   98  7   5   865

1 个答案:

答案 0 :(得分:3)

尝试:

sapply(df,function(x) table(cut(x[x<0.009],c(0,0.000001,0.001,0.002,Inf))) )

#              o m l c a aa ep
#(0,1e-06]     2 0 0 5 5  0  0
#(1e-06,0.001] 3 4 5 0 0  5  4
#(0.001,0.002] 0 0 0 0 0  0  1
#(0.002,Inf]   0 1 0 0 0  0  0