【发布时间】:2014-03-15 07:14:54
【问题描述】:
我为这个问题的标题道歉,但除非你看到这个问题,否则很难用一行来解释。
假设我有一个日志折叠变化值表(logFC 列)和与之关联的 FDR(错误发现率)值(BH 列)。
data <- matrix(NA,10,6)
colnames(data) <-c("logFCa","BHa","logFCb","BHb","logFCc","BHc")
data
row.names(data) <- LETTERS[seq(from = 1,to = 10)]
data[,1] <- 1
data[,2] <- c(1.000 ,0.001, 0.500, 0.500, 0.500, 0.010, 0.001, 0.200, 0.001, 0.001 )
data[,3] <- 2
data[,4] <- c(0.500 ,0.200 ,0.300, 0.001 ,0.020, 1.000, 0.001, 0.001, 3.000 ,0.001 )
data[,5] <- 3
data[,6] <- c(0.4000, 0.6000 ,0.5000, 0.4000, 0.7000, 0.0001, 0.9900, 0.0010, 0.0010, 0.0010 )
logFCa BHa logFCb BHb logFCc BHc
A 1 1.000 2 0.500 3 0.4000
B 1 0.001 2 0.200 3 0.6000
C 1 0.500 2 0.300 3 0.5000
D 1 0.500 2 0.001 3 0.4000
E 1 0.500 2 0.020 3 0.7000
F 1 0.010 2 1.000 3 0.0001
G 1 0.001 2 0.001 3 0.9900
H 1 0.200 2 0.001 3 0.0010
I 1 0.001 2 3.000 3 0.0010
J 1 0.001 2 0.001 3 0.0010
如果两个或多个相关的 BH 值小于 0.01,我想做的是计算 logFCa、logFCb 和/或 logFCc 的平均值。我的第一次尝试如下。如果 BHa
#BHa < 0.01 = 1
#sigA
sigA <- ifelse(data[,2]<0.01, 1 , NA )
data <- data.frame(data, sigA)
#BHb < 0.01 = 3
#sigB
sigB <- ifelse(data[,4]<0.01, 3, NA )
data <- data.frame(data, sigB)
#BHc < 0.01 = 5
#sigC
sigC <- ifelse(data[,6] < 0.01 , 5, NA )
data <- data.frame(data, sigC)
#Make column of row sums
keep <- c("sigA", "sigB", "sigC")
dataABC <- data[keep]
dataABC
data$ABC <- rowSums(dataABC, na.rm =TRUE)
所以现在我有了这个……
> data
logFCa BHa logFCb BHb logFCc BHc sigA sigB sigC ABC
A 1 1.000 2 0.500 3 0.4000 NA NA NA 0
B 1 0.001 2 0.200 3 0.6000 1 NA NA 1
C 1 0.500 2 0.300 3 0.5000 NA NA NA 0
D 1 0.500 2 0.001 3 0.4000 NA 3 NA 3
E 1 0.500 2 0.020 3 0.7000 NA NA NA 0
F 1 0.010 2 1.000 3 0.0001 NA NA 5 5
G 1 0.001 2 0.001 3 0.9900 1 3 NA 4
H 1 0.200 2 0.001 3 0.0010 NA 3 5 8
I 1 0.001 2 3.000 3 0.0010 1 NA 5 6
J 1 0.001 2 0.001 3 0.0010 1 3 5 9
但是,如果关联的 BH 列小于 0.01,我希望以下列具有 logFC 值的平均值。我想做的就是说……
如果 ABC 列小于 4,则设为“NA”
4 = logFCa 和 logFCb 的平均值
5 = “不适用”
6 = logFCa 和 logFCc 的平均值
8 = logFCb 和 logFCc 的平均值
9 = logFCa 和 logFCb 和 logFCc 的平均值
所以决赛桌看起来像……
logFCa BHa logFCb BHb logFCc BHc sigA sigB sigC ABC means
A 1 1.000 2 0.500 3 0.4000 NA NA NA 0 NA
B 1 0.001 2 0.200 3 0.6000 1 NA NA 1 NA
C 1 0.500 2 0.300 3 0.5000 NA NA NA 0 NA
D 1 0.500 2 0.001 3 0.4000 NA 3 NA 3 NA
E 1 0.500 2 0.020 3 0.7000 NA NA NA 0 NA
F 1 0.010 2 1.000 3 0.0001 NA NA 5 5 NA
G 1 0.001 2 0.001 3 0.9900 1 3 NA 4 1.5
H 1 0.200 2 0.001 3 0.0010 NA 3 5 8 2.5
I 1 0.001 2 3.000 3 0.0010 1 NA 5 6 2.0
J 1 0.001 2 0.001 3 0.0010 1 3 5 9 2.0
不要误会,最后一个平均值 2.0 是根据所有三个 logFC 值(即 1,2 和 3)计算得出的平均值 2,而不是上面一行中的值 2.0,它是从logFCa 和 logFCC。任何帮助将不胜感激!!!谢谢!
编辑。我应该补充一点,这个例子只是一个测试数据集。我想将此技术应用于大约 6000 行但列数相似的矩阵。
【问题讨论】: