1

我有以下数据框:

1  8.03    0.37     0.55    1.03     1.58    2.03 15.08   2.69    1.63    3.84   1.26 1.9692516

2  4.76    0.70       NA    0.12     1.62    3.30  3.24   2.92    0.35    0.49   0.42        NA

3  6.18    3.47     3.00    0.02     0.19   16.70  2.32  69.78    3.72    5.51   1.62 2.4812459

4  1.06   45.22     0.81    1.07     8.30  196.23  0.62 118.51   13.79   22.80   9.77 8.4296220

5  0.15    0.10     0.07    1.52     1.02    0.50  0.91   1.75    0.02    0.20   0.48 0.3094169

7  0.27    0.68     0.09    0.15     0.26    1.54  0.01   0.21    0.04    0.28   0.31 0.1819510

我想计算每一行的几何平均值。我的代码是

dat <- read.csv("MXreport.csv")
if(any(dat$X18S > 25)){  print("Fail!") } else { print("Pass!")}
datpass <- subset(dat, dat$X18S <= 25)
gene <- datpass[, 42:52]
gm_mean <- function(x){   prod(x)^(1/length(x))}
gene$score <- apply(gene, 1, gm_mean)
head(gene)

输入此代码后,我得到了这个输出:

1  8.03   0.37   0.55    1.03     1.58    2.03 15.08   2.69    1.63    3.84   1.26 1.9692516

2  4.76    0.70       NA    0.12     1.62    3.30  3.24   2.92    0.35    0.49   0.42        NA

3  6.18    3.47     3.00    0.02     0.19   16.70  2.32  69.78    3.72    5.51   1.62 2.4812459

4  1.06   45.22     0.81    1.07     8.30  196.23  0.62 118.51   13.79   22.80   9.77 8.4296220

5  0.15    0.10     0.07    1.52     1.02    0.50  0.91   1.75    0.02    0.20   0.48 0.3094169

7  0.27    0.68     0.09    0.15     0.26    1.54  0.01   0.21    0.04    0.28   0.31 0.1819510

问题是在将几何平均函数应用于具有 NA 的行后,我得到了 NA。如何跳过 NA 并计算具有 NA 的行的几何平均值

当我使用gene<- na.exclude(datpass[, 42:52]). 它跳过了具有 NA 的行,根本不计算几何平均值。这就是我现在想要的。我还想计算具有 NA 的行的几何平均值。我该怎么做呢?

4

0 回答 0