2014-10-09 23 views
5

R ile çok yeni yaşıyorum, bu yüzden verilerimin istenen manipülasyonunu nasıl gerçekleştireceğimize dair bazı işaretler alabileceğimi ümit ediyorum.R: veri kümelerini çeyrek/deciles'e bölme. Doğru yöntem nedir?

Üç değişkenli bir veri dizim var.

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

Ben çeyreklere veya Deciles içine fpkm dayalı benim gene_ids stratifying sonra ortalama meth_val çizmek istiyorum.

Bir dataframe içine benim veri yüklemek kez ...

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

Ben fpkm belirleyebilir kullanarak Deciles:

Oradan

  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 

verir

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

ki ben 'fpkm_val'in bu devrelerden birine uyup uymadığına bağlı olarak, veri çerçevesini esas olarak 10 gruba ayırmak isterim. Sonra ggplot'ta her decile meth_valini bir kutu çizimi olarak çizmek ve deciles boyunca bir istatistiksel test yapmak istiyorum.

Gerçekten sıkıştığım ana şey veri kümemi uygun şekilde nasıl bölebildiğim. Herhangi bir yardım büyük ölçüde takdir edilecektir!

Teşekkürler bir demet!

+0

R'deki kesme işlevini, küme değerlerine ayarlanan sonlar argümanı ile kullanın. İşte benzer bir Q & A http://stackoverflow.com/questions/11728419/using-cut-and-quartile-to-generate-breaks-in-r-function – technOslerphile

cevap

13

bir başka yolu dplyr içinde ntile() olacaktır.

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 kütüphanesini ve cut2 işlevini kullanmayı deneyebilirsiniz. Kesim noktalarını belirterek vektörü farklı gruplara ayırabilirsiniz. İşte bir örnek:

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)) 

Ve bölünmüş için ek sütunlar aynı veri çerçevesini alacak:

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) 
... 

Üstelik sen de kantilleri gruplar tarafından cut2 belirterek kullanarak kesebilir. Devamını oku ?cut2. Böyle

4

Belki daha kolay:

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

İlgili konular