我有一个包含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
答案 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