如何在添加数据框的行时跳过一些行条目
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
)的情况下处理您的函数。
我有一个 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
)的情况下处理您的函数。