首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从两个数字向量创建DESeqDataSetFromMatrix?

如何从两个数字向量创建DESeqDataSetFromMatrix?
EN

Stack Overflow用户
提问于 2019-05-15 17:09:09
回答 2查看 2.1K关注 0票数 0

我有两个数据集,每个数据集的形式如下:

代码语言:javascript
运行
复制
Gene1Name, 234
Gene2Name, 445
Gene3Name, 23
...
GeneNName, 554

这两个数据集的基因名称是相同的。第二列上的数字是对应基因的表达计数。

我想对这些数据进行差异基因表达分析。为此,我使用了一个DESeq库。

要使用DESeq函数,需要创建一个对象

代码语言:javascript
运行
复制
dds <- DESeqDataSetFromMatrix(countData=data, colData=meta, design=~sampletype)

对于我的例子,需要将什么作为参数传递到DESeqDataSetFromMatrix函数中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-15 20:21:03

我认为,如果你试着遵循这个简单的例子,它至少可以帮助你解决你真正的问题。

我们必须从虚拟数据集准备开始(请阅读如何制作一个最小的可重现性示例):

创建一个treatment数据集:

代码语言:javascript
运行
复制
library(tidyverse)

set.seed(56154455)

treatment <- data.frame(
  geneName = LETTERS,
  cts      = sample(0:1000, 26)
)

head(treatment)

#   geneName cts
# 1        A 834
# 2        B 860
# 3        C 950
# 4        D 302
# 5        E 979
# 6        F 159

创建一个control数据集:

代码语言:javascript
运行
复制
set.seed(56154455)

control   <- treatment[sample(1:26, 26), ]
control[, 1] <- treatment[, 1]

head(control)

#    geneName cts
# 3         A 950
# 23        B  41
# 15        C 889
# 20        D 629
# 14        E 398
# 4         F 302

通过treatmentcontrol通过geneName连接

代码语言:javascript
运行
复制
cts <- full_join(treatment, control, by = 'geneName') %>%
  rename('treatment' = cts.x, 'control' = cts.y) %>%
  column_to_rownames('geneName') %>%
  as.matrix

head(cts)

#   treatment control
# A       331     737
# B       914     676
# C       161     161
# D       592     769
# E       946      74
# F       813     314

准备您的coldata

记住,这只是一个虚拟的例子,所以您真正的coldata可能包含任意数量的列,这反映了您的实验的设计。但是,coldata中的行数必须等于实验数据中的列数(这里是cts)。请阅读SummarizedExperiment文档类,在那里您可以找到详细的解释。另一个很好的资源是拉法书

代码语言:javascript
运行
复制
coldata <- matrix(c("DMSO", "1xPBS"), dimnames = list(colnames(cts), 'treatment'))

coldata

#        treatment
# treatment "DMSO"   
# control   "1xPBS" 

最后,创建您的DESeqDataSet

代码语言:javascript
运行
复制
dds <- DESeq2::DESeqDataSetFromMatrix(
  countData = cts, 
  colData   = coldata, 
  design    = ~treatment
  )

其中:

  • countData是您的实验数据,准备如上;
  • colData是您的coldata矩阵,具有实验元数据;
  • ~treatment是公式,描述了你在实验中测试的实验模型。它可以是任何类似~ treatment + sex * age等。

代码语言:javascript
运行
复制
dds

# class: DESeqDataSet 
# dim: 26 2 
# metadata(1): version
# assays(1): counts
# rownames(26): A B ... Y Z
# rowData names(0):
# colnames(2): treatment control
# colData names(1): treatment
票数 2
EN

Stack Overflow用户

发布于 2019-05-15 17:53:13

你只需要把这两个向量连在一起,然后把它放到一个矩阵中。

既然你说你的两个数据集包含两列,我假设第一个是基因名,第二个是计数。你还提到名字是一样的。所以你可以这么做:

代码语言:javascript
运行
复制
data <- cbind(x1[,2], x2[,2])
rownames(data) <- x1[,1]
colnames(data) <- c("sample1", "sample2")

meta <- data.frame(sampletype = c("A", "B"))

dds <- DESeqDataSetFromMatrix(countData=data, colData=meta, design=~sampletype)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56154455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档