【发布时间】:2017-10-22 13:41:02
【问题描述】:
我正在尝试过滤 RNA-seq 数据分析的输出。我想在至少一个实验条件(数据框)中生成符合指定标准的基因列表。
比如数据输出为.csv,所以我在整个目录中读取,如下。
readList = list.files("~/Path/To/File/", pattern = "*.csv")
files = lapply(readList, read.csv, row.names = 1)
#row.names = 1 sets rownames as gene names
这会读入 3 个 .csv 文件,A、B 和 C。数据如下所示
A = files[[1]]
B = files[[2]]
C = files[[3]]
head(A)
logFC logCPM LR PValue FDR
YER037W -1.943616 6.294092 34.30835 0.000000004703583 0.00002276064
YJL184W -1.771273 5.840774 31.97088 0.000000015650144 0.00003786552
YFR053C 1.990102 10.107793 30.55576 0.000000032440747 0.00005232692
YDR342C 2.096877 6.534761 28.08635 0.000000116021451 0.00014035695
YGL062W 1.649138 8.940714 23.32097 0.000001370968319 0.00132682314
YFR044C 1.992810 9.302504 22.91553 0.000001692786468 0.00132736130
然后我尝试过滤所有这些以生成一个基因列表(行名),其中必须在至少一个数据集中满足两个条件。
1.logFC > 1 或
2.FDR
所以我像这样遍历数据帧
genesKeep = ""
for (i in 1:length(files) {
F = data.frame(files[i])
sigGenes = rownames(F[F$FDR<0.05 & abs(F$logFC>1), ])
genesKeep = append(genesKeep, values = sigGenes)
}
这给了我一个基因列表,但是,当我根据数据对这些基因进行健全检查时,列出的一些基因没有通过这些阈值,而其他通过这些阈值的基因不在列表中。
例如
df = cbind(A,B,C)
genesKeep = unique(genesKeep)
logicTest = rownames(df) %in% genesKeep
dfLogic = cbind(df, logicTest)
虽然大多数基因确实通过了我设定的标准,但我发现少数基因存在一些差异。例如
A.logFC A.FDR B.logFC B.FDR C.logFC C.FDR logicTest
YGR181W -0.8050325 0.1462688 -0.6834184 0.2162317 -1.1923744 0.04049870 FALSE
YOR185C 0.8321432 0.1462919 0.7401477 0.2191413 -0.9616989 0.04098177 TRUE
第一个基因(YGR181W)通过条件 C 的标准,其中 logFC
相反,第二个基因(YOR185C)在任何情况下都不通过这些标准,但该基因存在于genesKeep列表中。
我不确定我在哪里出错了,但如果有人有任何想法,他们将不胜感激。
谢谢。
【问题讨论】:
-
您可能想尝试按行名称排序,或者合并而不是
cbinding,因为数据集之间的并行行名称可能存在问题 -
@akash87 你是对的!这么简单的事情让我整天都在坚持。非常感谢您的建议!