2014-10-09 4 views
5

मैं आर के साथ बहुत नया हूं, इसलिए उम्मीद है कि मैं अपने डेटा के वांछित हेरफेर को प्राप्त करने के तरीके पर कुछ पॉइंटर्स प्राप्त कर सकता हूं।आर: क्वार्टाइल/deciles में विभाजित डेटासेट। सही तरीका क्या है?

मेरे पास तीन चर के साथ डेटा की एक सरणी है।

gene_id  fpkm meth_val 
1 100629094  0.000 0.0063 
2 100628995  0.000 0.0000 
3 102655614 111.406 0.0021 

मैं चतुर्थकों या deciles में fpkm के आधार पर मेरे gene_ids stratifying के बाद औसत meth_val प्लॉट करने के लिए करना चाहते हैं।

एक बार मैं एक dataframe में मेरी डेटा लोड ...

data <- read.delim("myfile.tsv", sep='\t') 

मैं fpkm निर्धारित कर सकते हैं का उपयोग कर deciles:

quantile(data$fpkm, prob = seq(0, 1, length = 11), type = 5 

जो पैदावार

  0%   10%   20%   30%   40%   50% 
0.000000e+00 9.783032e-01 7.566164e+00 3.667630e+01 1.379986e+02 3.076280e+02 
     60%   70%   80%   90%   100% 
5.470552e+02 8.875592e+02 1.486200e+03 2.974264e+03 1.958740e+05 

वहाँ से, मैं 'ffkm_val इन deciles में से किसी एक में फिट बैठता है या नहीं, इस पर आधारित डेटा फ्रेम को अनिवार्य रूप से 10 समूहों में विभाजित करना चाहते हैं। फिर मैं बॉक्स प्लॉट के रूप में ggplot में प्रत्येक डेसील के meth_val को प्लॉट करना चाहता हूं और deciles में एक सांख्यिकीय परीक्षण कर सकता हूं।

मुख्य बात यह है कि मैं वास्तव में अटक गया हूं कि मेरे डेटासेट को उचित तरीके से कैसे विभाजित किया जाए। किसी भी सहायता की सराहना की जाएगी!

धन्यवाद एक गुच्छा!

+0

क्वांटाइल पर सेट ब्रेक तर्क के साथ आर में कट फ़ंक्शन का उपयोग करें। यहां एक समान प्रश्नोत्तर है http://stackoverflow.com/questions/11728419/using-cut-and-quartile-to-generate-breaks-in-r- कार्यक्षमता – technOslerphile

उत्तर

13

एक और तरीका है dplyr में ntile() होगा।

library(tidyverse) 

foo <- data.frame(a = 1:100, 
        b = runif(100, 50, 200), 
        stringsAsFactors = FALSE) 

foo %>% 
    mutate(quantile = ntile(b, 10)) 

# a   b quantile 
#1 1 93.94754  2 
#2 2 172.51323  8 
#3 3 99.79261  3 
#4 4 81.55288  2 
#5 5 116.59942  5 
#6 6 128.75947  6 
2

आप Hmisc लाइब्रेरी और cut2 फ़ंक्शन का उपयोग करने का प्रयास कर सकते हैं। आप कटपॉइंट्स को बताकर वेक्टर को विभिन्न समूहों में काट सकते हैं। यहाँ एक उदाहरण है:

library(Hmisc) 
data <- data.frame(gene_id=sample(c("A","B","D", 100), 100, replace=TRUE), 
       fpkm=abs(rnorm(100, 100, 10)), 
       meth_val=abs(rnorm(100, 10, 1))) 
quantiles <- quantile(data$fpkm, prob = seq(0, 1, length = 11), type = 5) 
data$cutted <- cut2(data$fpkm, cuts = as.numeric(quantiles)) 

और आप विभाजन के लिए अतिरिक्त कॉलम के साथ एक ही डेटा फ्रेम मिल जाएगा:

gene_id  fpkm meth_val  cutted 
1   B 102.16511 8.477469 [100.4,103.2) 
2   A 110.59269 9.256172 [106.4,110.9) 
3   B 93.15691 10.560936 [ 92.9, 95.3) 
4   B 105.74879 10.301358 [103.2,106.4) 
5   A 96.12755 11.336484 [ 95.3, 96.8) 
6   B 106.29204 8.286120 [103.2,106.4) 
... 

इसके अलावा आप भी quantiles समूहों द्वारा cut2 निर्दिष्ट का उपयोग कर में कटौती कर सकते हैं। ?cut2 और पढ़ें।

4
इस तरह

शायद आसान:

data$qunatil = cut(data$fpkm, quantile(data$fpkm, prob = seq(0, 1, length = 11), type = 5))

संबंधित मुद्दे