如何在从数据框中的行中排除零值的同时计算行的平均值

时间:2012-09-25 13:02:53

标签: r

我正在尝试计算数据框中每行的平均值。每行都有零,我想从计算中排除这些。我不想删除整行而只删除零并计算每行中剩余值的平均值。如果行的全部值为零,则结果应为零。

2 个答案:

答案 0 :(得分:20)

怎么样

nzmean <- function(x) {
    if (all(x==0)) 0 else mean(x[x!=0])
}
apply(mydata,1,nzmean)

我觉得稍微可能更快

nzmean <- function(x) {
    zvals <- x==0
    if (all(zvals)) 0 else mean(x[!zvals])
}

即。尽量避免将x与零进行两次比较。

答案 1 :(得分:15)

或者你可以做的是将NA分配给零,这实际上是你想要做的。一些样本数据:

spam = matrix(runif(100), 10, 10)
spam[1,2] = 0
spam[4,3] = 0
spam[10,] = 0
spam[spam == 0] <- NA

并使用rowMeansifelse用于检查完全NA的行。 na.rm参数在这里很重要:

mean_values = rowMeans(spam, na.rm = TRUE)
mean_values = ifelse(is.na(mean_values), 0, mean_values)