如何在添加数据框的行时跳过一些行条目

How to skip some row entries while adding rows of a data frame

我有一个 p 值数据框。除了 p 值,它还有一些零条目。

data

     V1          V3          V4          V5          V6          V7        
1  ADAM32       0.001           0           0           0           0      
2  ADAM32       0.001        0.65       0.001       0.001        0.65   
3  ADAM32        0.65           0           0           0           0      
4    CCL5    0.000491    0.000491    0.000491           0           0      
5   CILP2 0.500000024 0.500000024 0.500000024           0           0      
6   EPHB3    0.000562    0.000562    0.000562    0.000562    0.000562      
7   EPHB3    0.000562           0           0           0           0      
8  GUCA1A    0.002006    0.602006    0.002006    0.602006    0.002006      
9  GUCA1A    0.602006           0           0           0           0      
10  HSPA6    0.000322    0.000322    0.000322    0.000322    0.000322      
11  HSPA6    0.000322           0           0           0           0      
12  MAPK1       0.002       0.002       0.002           0           0      

我使用以下代码应用 Fisher 方法来组合每一行的 p 值。

    ## Fisher's Method 
    Fisher.test <- function(p) {  
      Xsq <- -2*sum(log(p))
      p.val <- pchisq(Xsq, df = 2*length(p), lower.tail = FALSE)
      return(c(Xsq = Xsq, p.value = p.val))

    }

   for(k in 1 : nrow(data))
   {
     p <- as.numeric(data[j,-1])
     fisher <- Fisher.test(p)
     print(fisher)
   }

我想在添加到行总和时跳过零,因为它会在 p 值的对数转换后产生无穷大的值。

使用apply写得更简洁:

apply(df, 1, function(u) {x=as.numeric(u[-1]);Fisher.test(x[x!=0])})

前 4 行 returns:

#            [,1]         [,2]      [,3]         [,4]
#Xsq     13.81551 4.316966e+01 0.8615658 4.571440e+01
#p.value  0.00100 4.637400e-06 0.6500000 3.374549e-08

即使最好的方法是在给定带有 0 的向量(并且还充满 0)的情况下处理您的函数。