This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Subsetting DESeq2 results by padj quantity

I am trying to export DESeq2 results that fall under a certain padj in the following way:

resFemEB<-results(dds, lfcThreshold=2, altHypothesis="greater", alpha = .1, format = c("GRanges"), independentFiltering=FALSE, contrast=c(1, -1/3, -1/3, -1/3))

resOrderedFemEB <- resFemEB[which(resFemEB$padj < 0.1),]

 df <- data.frame(seqnames=seqnames(resOrderedFemEB),
+                  starts=start(resOrderedFemEB)-1,
+                  ends=end(resOrderedFemEB),
+                  names=c(rep(".", length(resOrderedFemEB))),
+                  scores=c(rep(".", length(resOrderedFemEB))),
+                  strands=strand(resOrderedFemEB))
> write.table(df, file="resOrderedFemEB.bed", quote=F, sep="\t", row.names=F, col.names=F)

This works well for getting all of the results in a BED format that fall below a certain padj, what I wanted to ask is how I can just get the top 1000 exported (currently the list is around 10K that falls within that padj criteria)?

deseq2 deseq r

2 answers

dta <- subset(result, padj<.1)
dta_sorted = dta[order(dta$padj), ]
write.table(head(dta_sorted,1000),"dta.tsv")

Exactly what I was after, thanks!

You could use the head() function

e.g.:

head(df, n=1000)

Thanks, yes this I know how to do, what I need is to export the top 1000 that fall under padj<.1, doing this currently to export them all:

write.table(df, file="resOrderedFemEB.bed", quote=F, sep="\t", row.names=F, col.names=F)

So then you need to sort the data frame based on padj and then take the head()

Log in to answer this question.