R 如何计算行的平均值,同时从数据帧中的行中排除零值

R 如何计算行的平均值,同时从数据帧中的行中排除零值,r,R,我试图计算数据框中每一行的平均值。每行中都有零,我想从计算中排除它们。我不想删除整行,只想删除零,并计算每行中重新生成值的平均值。若行中的所有值均为零值,则结果应为零 怎么样 nzmean <- function(x) { if (all(x==0)) 0 else mean(x[x!=0]) } apply(mydata,1,nzmean) nzmean或者您可以将NA赋值为零,这实际上就是您想要做的。一些样本数据: spam = matrix(runif(100), 10,

我试图计算数据框中每一行的平均值。每行中都有零,我想从计算中排除它们。我不想删除整行,只想删除零,并计算每行中重新生成值的平均值。若行中的所有值均为零值,则结果应为零

怎么样

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

nzmean或者您可以将
NA
赋值为零,这实际上就是您想要做的。一些样本数据:

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

这可能比我针对超大数据集的解决方案更快。我也喜欢在概念上使用NA,它表明0不是有效数字。这是一种非常聪明的方法,可能比@BenBolker的更快。我想我已经说过它可能更快。这种方法确实有两个可能的缺点:(1)它很聪明(如果它让人更难理解的话,这实际上是一个缺点)(2)它修改原始数据,如果您想用原始格式的数据做其他事情,这可能是低效的。
spam = matrix(runif(100), 10, 10)
spam[1,2] = 0
spam[4,3] = 0
spam[10,] = 0
spam[spam == 0] <- NA
mean_values = rowMeans(spam, na.rm = TRUE)
mean_values = ifelse(is.na(mean_values), 0, mean_values)