矩阵的每一行中有多少个非 NA 值?

How many non-NA values in each row for a matrix?

我有一个矩阵(栅格),我正在计算该栅格中每一行的平均值:

  library (raster)
  r <- raster(nrows=10, ncols=10);r <- setValues(r, 1:ncell(r))
  extent(r) = extent(c(xmn=-180,xmx=180,ymn=-90,ymx=90))
  stepsize = (r@extent@ymax - r@extent@ymin) / r@nrows
  yvals = seq(r@extent@ymax - stepsize / 2, r@extent@ymin, -stepsize)
  The x-values will be the mean of each row in the raster:
  xvals = rowMeans(as.matrix(r))
  plot(xvals, yvals)

我需要知道在计算每行 (N) 的平均值时考虑了多少个值?某些像素可能具有 NA,因此每行中的值数量将不相同。

最简单

rowSums(!is.na(x))(感谢@Khashaa 提供此代码)。

注意 ! 的使用等同于 "not"。这意味着 !is.na(x) 正在评估语句 "values that are not equal to "NA".

或者:

要return不NA可以改代码如下:

sum(is.na(x)==FALSE)

您可以使用 apply 修改代码以将代码应用于矩阵,如下所示:

apply(d,2,function(x) sum(is.na(x))==TRUE))

其中 d是一个矩阵如:

d=matrix(c(1,NA,NA,NA),ncol=2,nrow=2)