Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如果行中的另一个数字等于某个值,如何选择行中的特定值进行平均?_R_Matrix_Average - Fatal编程技术网

R 如果行中的另一个数字等于某个值,如何选择行中的特定值进行平均?

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

我为这个问题的标题道歉,但除非你看到这个问题,否则很难用一行字来解释

因此,假设我有一个日志折叠更改值表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)]

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