R Преобразование кадра данных в помеченную матрицу - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть фрейм данных с этими данными.

# A tibble: 20 x 3
# Groups:   CpG, Group [20]
   CpG        Group  Range
   <fct>      <dbl>  <dbl>
 1 cg01003813    1. 0.971 
 2 cg01003813    2. 0.0917
 3 cg01003813    3. 0.0535
 4 cg01003813    4. 0.0627
 5 cg01003813    5. 0.0575
 6 cg26484667    1. 0.0768
 7 cg26484667    2. 0.104 
 8 cg26484667    3. 0.0735
 9 cg26484667    4. 0.0453
10 cg26484667    5. 0.139 
11 cg25296477    1. 0.0745
12 cg25296477    2. 0.130 
13 cg25296477    3. 0.0772
14 cg25296477    4. 0.131 
15 cg25296477    5. 0.0765
16 cg13176022    1. 0.0895
17 cg13176022    2. 0.0236
18 cg13176022    3. 0.0412
19 cg13176022    4. 0.0478
20 cg13176022    5. 0.0346

Затем я распределяю фрейм данных так, чтобы он выглядел так, как я хотел бы, чтобы матрица выглядела:

> tidyr::spread(test, Group, Range, fill = 0)
# A tibble: 4 x 6
# Groups:   CpG [4]
  CpG           `1`    `2`    `3`    `4`    `5`
  <fct>       <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 cg01003813 0.971  0.0917 0.0535 0.0627 0.0575
2 cg13176022 0.0895 0.0236 0.0412 0.0478 0.0346
3 cg25296477 0.0745 0.130  0.0772 0.131  0.0765
4 cg26484667 0.0768 0.104  0.0735 0.0453 0.1390

Теперь яЯ застрял.Я не могу понять, как превратить это в правильно отформатированную и помеченную матрицу.

Я хочу, чтобы мои 5 групп были заголовками столбцов (как они есть).Я хочу, чтобы CpG были именами строк (в настоящее время это первый столбец. Я просто не могу понять, как превратить это в правильно помеченную матрицу.

Спасибо за вашу поддержку.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

просто превратите его в матрицу, как показано ниже

m <- tidyr::spread(test, Group, Range, fill = 0)
mat <- as.matrix(m[, -1])
dimnames(mat) <- list(m$CpG, colnames(m[, -1]))
mat

                1      2      3      4      5
cg01003813 0.9710 0.0917 0.0535 0.0627 0.0575
cg13176022 0.0895 0.0236 0.0412 0.0478 0.0346
cg25296477 0.0745 0.1300 0.0772 0.1310 0.0765
cg26484667 0.0768 0.1040 0.0735 0.0453 0.1390
0 голосов
/ 24 апреля 2018

xtabs приближает вас к тому, что вы хотите:

set.seed(1)
(foo <- cbind(expand.grid(CpG=letters[1:4], Group=1:5), Range = runif(20)))
#>    CpG Group      Range
#> 1    a     1 0.26550866
#> 2    b     1 0.37212390
#> 3    c     1 0.57285336
#> 4    d     1 0.90820779
#> 5    a     2 0.20168193
#> 6    b     2 0.89838968
#> 7    c     2 0.94467527
#> 8    d     2 0.66079779
#> 9    a     3 0.62911404
#> 10   b     3 0.06178627
#> 11   c     3 0.20597457
#> 12   d     3 0.17655675
#> 13   a     4 0.68702285
#> 14   b     4 0.38410372
#> 15   c     4 0.76984142
#> 16   d     4 0.49769924
#> 17   a     5 0.71761851
#> 18   b     5 0.99190609
#> 19   c     5 0.38003518
#> 20   d     5 0.77744522

xtabs(Range ~ Group + CpG, foo)
#>      CpG
#> Group          a          b          c          d
#>     1 0.26550866 0.37212390 0.57285336 0.90820779
#>     2 0.20168193 0.89838968 0.94467527 0.66079779
#>     3 0.62911404 0.06178627 0.20597457 0.17655675
#>     4 0.68702285 0.38410372 0.76984142 0.49769924
#>     5 0.71761851 0.99190609 0.38003518 0.77744522
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...