Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:将数据集拆分为四分位数/十分位数。正确的方法是什么?_R_Plot_Dataframe - Fatal编程技术网

R:将数据集拆分为四分位数/十分位数。正确的方法是什么?

R:将数据集拆分为四分位数/十分位数。正确的方法是什么?,r,plot,dataframe,R,Plot,Dataframe,我对R非常陌生,所以希望我能得到一些关于如何实现我的数据的理想操作的建议 我有一个包含三个变量的数据数组 gene_id fpkm meth_val 1 100629094 0.000 0.0063 2 100628995 0.000 0.0000 3 102655614 111.406 0.0021 在根据fpkm将我的基因分为四分位或十分位后,我想绘制平均方法值 一旦我将数据加载到数据帧中 data <- read.delim("myfile.t

我对R非常陌生,所以希望我能得到一些关于如何实现我的数据的理想操作的建议

我有一个包含三个变量的数据数组

  gene_id       fpkm  meth_val
1 100629094     0.000 0.0063
2 100628995     0.000 0.0000
3 102655614   111.406 0.0021
在根据fpkm将我的基因分为四分位或十分位后,我想绘制平均方法值

一旦我将数据加载到数据帧中

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

          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
从这里开始,我想根据fpkm_val是否适合这些小数之一,将数据帧基本上分成10组。然后,我想将ggplot中每一个十分位数的方法值绘制成一个方框图,并对十位数进行统计测试

我真正感兴趣的主要问题是如何以正确的方式分割数据集。任何帮助都将不胜感激


非常感谢

您可以尝试使用
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))

此外,您还可以使用
cut2
指定分位数组进行剪切。阅读更多
?cut2

可能更容易:


data$qunatil=cut(data$fpkm,分位数(data$fpkm,prob=seq(0,1,length=11,type=5))
另一种方法是
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
库(tidyverse)
富%
变异(分位数=分位数(b,10))
#分位数
#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

使用R中的cut函数,将breaks参数设置为分位数。下面是一个类似的问答
    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)
...
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