Извлечение строк и построение одной гистограммы - PullRequest
0 голосов
/ 21 июня 2020

У меня есть список дифференциально экспрессируемых генов в объекте с именем edger_res (уже упорядоченный для наиболее значимых вверху) и необработанные подсчеты в gene_cts (отсортированные в алфавитном порядке).

нужно сделать так, чтобы первые 5 экспрессируемых генов поднялись вверх и 5 вниз, на одном графике (или фасете ... не возражаете). Но у меня ничего не получается.

Примеры объектов данных:

> head(edger_res)
                 logFC   logCPM        F       PValue         FDR
PHF21A       -5.482006 7.952084 26.62146 2.477049e-07 0.005186941
LOC101119317 -6.156996 6.268149 18.31106 1.876978e-05 0.196519644
SLC6A11      -5.163764 6.888840 17.33798 3.129958e-05 0.199922391
TTLL5        -5.796932 6.029176 16.30225 5.401907e-05 0.199922391
CORO6        -5.797556 6.024060 16.26880 5.498098e-05 0.199922391
CAPG          5.833208 6.039094 15.89117 6.711370e-05 0.199922391

> head(gene_cts)
        BC01 BC02 BC03 BC04 BC08 BC11 BC05 BC06 BC07 BC09 BC10 BC12
A1BG       0    0    0    0    1    0    0    0    0    0    0    0
A1CF       0    0    0    0    1    0    1    1    0    0    0    0
A2ML1      0    0    8    0    0    0    4    4    0    0    0    1
A3GALT2    0    0    0    0    1    0    0    0    0    0    0    1
A4GALT     0    0    0    0    0    0    0    1    0    0    0    0
A4GNT     20   13   49   12   16   23   79   65    9    7   12    8

Вот где у меня пока что:

# Filter up/down regulated genes
UpReg <- edger_res[which(edger_res$logFC>1),]
UpReg <- row.names(UpReg[1:5,])
UpRegGenes <- gene_cts[which(row.names(gene_cts)%in%UpReg),]
DownReg <- edger_res[which(edger_res$logFC<1),]
DownReg <- row.names(DownReg[1:5,])
DownRegGenes <- gene_cts[which(row.names(gene_cts)%in%DownReg),]

# bind and transpose
UpDownGenes <- rbind(DownRegGenes, UpRegGenes)
UpDownGenes <- t(UpDownGenes)

# make numeric
for (i in 1:12) {
  UpDownGenes[i,] <- as.numeric(UpDownGenes[i,])
}

Что дает

UpDownGenes
     CORO6 LOC101119317 PHF21A SLC6A11 TTLL5 CAPG CXHXorf23 EPHA7 SLC4A10 UAP1
BC01     1           10      0      90    25    0         0     0       0    0
BC02     0            0     58       0     1    0         0     0       0    0
BC03     1           18     86       0    15    0         0     0       0    0
BC04     8            0      0       0     1    0         0     0       0    0
BC08    28           16     30       1     0    0         0     0       0    0
BC11     0            8     42       0     0    0         0     0       0    0
BC05     0            0      0       1     0    0        14    20       0   13
BC06     0            0      0       0     0    0        17    16      23    0
BC07     0            0      0       1     0    8         0     1       0    4
BC09     0            0      3       0     0    0         0     1       0   12
BC10     0            0      0       0     0    1         0     4      16    7
BC12     0            0      1       0     0   24        14     0       1    0

Но когда я пытаюсь построить график, используя это:

UpDownPlot <- 
  ggplot(data = UpDownGenes, aes(x=colnames(UpDownGenes))) + 
  geom_boxplot(fill = studyDesign$group) + 
  ggtitle("Top 5 Up and 5 Down Differentially Expressed Genes") + 
  xlab("Gene") +ylab("normalised read count") +
  theme_bw() +
  theme(legend.position = "none")
print(UpDownPlot)

, я получаю следующее:

Error: `data` must be a data frame, or other object coercible by `fortify()`, not a numeric vector

Я пробовал сделать UpDownGene как df, используя UpDownGenes <- as.data.frame(UpDownGenes) вместо этого, но он дал

Error: Aesthetics must be either length 1 or the same as the data (12): x

1 Ответ

1 голос
/ 21 июня 2020

Самостоятельное исправление. Преобразовал все с помощью as.data.frame (не уверен, что вызвало проблему), затем получил образец и идентификатор группы в столбцы перед запуском через melt().

# Filter up/down regulated genes
UpReg <- edger_res[which(edger_res$logFC>1),]
UpReg <- row.names(UpReg[1:5,])
UpRegGenes <- as.data.frame(gene_cts[which(row.names(gene_cts)%in%UpReg),])
DownReg <- edger_res[which(edger_res$logFC<1),]
DownReg <- row.names(DownReg[1:5,])
DownRegGenes <- as.data.frame(gene_cts[which(row.names(gene_cts)%in%DownReg),])

# bind and transpose and rownames
UpDownGenes <- rbind(DownRegGenes, UpRegGenes)
UpDownGenes <- t(UpDownGenes)
rownames(UpDownGenes) <- as.character(studyDesign$samples)
UpDownGenes <- as.data.frame(UpDownGenes)

UpDownGenes$sample <- as.character(row.names(UpDownGenes))
row.names(UpDownGenes) <- NULL
UpDownGenes$group <- studyDesign$group
UDGmelt <- melt(UpDownGenes, id.vars=c("sample", "group"), variable.name="gene")


UpDownPlot <- 
  ggplot(data = UDGmelt, aes(x=gene, y=value, color=group)) + 
  geom_boxplot() + 
  ggtitle("Top 5 Up and 5 Down Differentially Expressed Genes") + 
  xlab("Gene") +ylab("normalised read count") +
  theme_bw() +
  theme(legend.position = "none")
print(UpDownPlot)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...