Я пытаюсь вычислить среднее значение каждой строки в моем кадре данных. В каждой строке есть нули, и я хочу исключить их из расчета. Я не хочу удалять всю строку, но только нули и вычислять среднее значение повторных значений в каждой строке. Если строка имеет все нулевые значения, то результат должен быть равен нулю.
Как я могу вычислить средства строк, исключая нулевые значения из строк в кадре данных
Ответ 1
Как насчет
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
с нулем в два раза.
Ответ 2
Или то, что вы могли бы сделать, это присвоить NA
нулю, что эффективно, что вы хотите сделать. Некоторые примеры данных:
spam = matrix(runif(100), 10, 10)
spam[1,2] = 0
spam[4,3] = 0
spam[10,] = 0
spam[spam == 0] <- NA
и используйте rowMeans
, ifelse
должен проверить, что строки полностью NA
. Аргумент na.rm
важен здесь:
mean_values = rowMeans(spam, na.rm = TRUE)
mean_values = ifelse(is.na(mean_values), 0, mean_values)