R 如果行中的另一个数字等于某个值,如何选择行中的特定值进行平均?
我为这个问题的标题道歉,但除非你看到这个问题,否则很难用一行字来解释 因此,假设我有一个日志折叠更改值表logFC列和与它们相关联的FDR false discover rate值BH列R 如果行中的另一个数字等于某个值,如何选择行中的特定值进行平均?,r,matrix,average,R,Matrix,Average,我为这个问题的标题道歉,但除非你看到这个问题,否则很难用一行字来解释 因此,假设我有一个日志折叠更改值表logFC列和与它们相关联的FDR false discover rate值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)] da
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,我想让下一列包含logFC值的平均值。我想做的是说
如果列ABC小于4,则将其设为NA
4=logFCa和logFCb的平均值
5=NA
6=对数fca和对数fcc的平均值
8=对数fcb和对数fcc的平均值
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行但列数相似的矩阵 我想你只是想要平均值列。这应该做到:
df <- data.frame(data)
df$include <- with(df,(BHa<0.01)+(BHb<0.01)+(BHc<0.01)>1)
df$means <- apply(df,1,function(x)
ifelse(x[7],mean(x[2*which(x[c(2,4,6)]<0.01)-1]),NA))
df <- df[,-7] # get rid of column "include"
df
# logFCa BHa logFCb BHb logFCc BHc means
# A 1 1.000 2 0.500 3 0.4000 NA
# B 1 0.001 2 0.200 3 0.6000 NA
# C 1 0.500 2 0.300 3 0.5000 NA
# D 1 0.500 2 0.001 3 0.4000 NA
# E 1 0.500 2 0.020 3 0.7000 NA
# F 1 0.010 2 1.000 3 0.0001 NA
# G 1 0.001 2 0.001 3 0.9900 1.5
# H 1 0.200 2 0.001 3 0.0010 2.5
# I 1 0.001 2 3.000 3 0.0010 2.0
# J 1 0.001 2 0.001 3 0.0010 2.0
首先,我们附加一列include,如果两个或多个BH是
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
df <- data.frame(data)
df$include <- with(df,(BHa<0.01)+(BHb<0.01)+(BHc<0.01)>1)
df$means <- apply(df,1,function(x)
ifelse(x[7],mean(x[2*which(x[c(2,4,6)]<0.01)-1]),NA))
df <- df[,-7] # get rid of column "include"
df
# logFCa BHa logFCb BHb logFCc BHc means
# A 1 1.000 2 0.500 3 0.4000 NA
# B 1 0.001 2 0.200 3 0.6000 NA
# C 1 0.500 2 0.300 3 0.5000 NA
# D 1 0.500 2 0.001 3 0.4000 NA
# E 1 0.500 2 0.020 3 0.7000 NA
# F 1 0.010 2 1.000 3 0.0001 NA
# G 1 0.001 2 0.001 3 0.9900 1.5
# H 1 0.200 2 0.001 3 0.0010 2.5
# I 1 0.001 2 3.000 3 0.0010 2.0
# J 1 0.001 2 0.001 3 0.0010 2.0