如何在添加数据帧行时跳过某些行条目

时间:2015-03-24 10:17:55

标签: r dataframe p-value rowsum

我有一个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值的对数转换后导致无限值。

1 个答案:

答案 0 :(得分:2)

使用apply进行更简洁的撰写:

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

在前4行返回:

#            [,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)。