Условный расчет средств разных столбцов в data.table с R

Здесь обсуждался вопрос вычисления средних и медиан вектора t для каждого значения вектора y (от 1 до 4), где x = 1, z = 1, с использованием aggregate функция в R.

 x y  z  t
 1 1  1 10
 1 0  1 15
 2 NA 1 14
 2 3  0 15
 2 2  1 17
 2 1 NA 19
 3 4  2 18
 3 0  2 NA
 3 2  2 45
 4 3  2 NA
 4 1  3 59
 5 0  3 0
 5 4  3 45
 5 4  4 74
 5 1  4 86

Но как я могу рассчитать (mean(y)+mean(z))/(mean(z)-mean(t)) для каждого значения (от 1 до 5) вектора х и не делать вычисления для значений 0 а также NA в каком векторе? Например, в векторе y 3-е значение равно 0, поэтому не следует использовать 3-е число в каждом векторе (y,z, t). И в результате третий ряд (для х = 3) должен быть NA,

Вот код для вычисления средних значений y,z и t, и необходимо добавить формулу для расчета (mean(y)+mean(z))/(mean(z)-mean(t)):

data <- data.table(dataframe)
bar <- data[,.N,by=x]
foo <- data[ ,list(mean.y  =mean(y, na.rm = T),
               mean.z=mean(z, na.rm = T),
               mean.t=mean(t,na.rm = T)),
         by=x]     

В этом коде для расчета средства используются все строки, но для расчета (mean(y)+mean(z))/(mean(z)-mean(t))ни одна строка не должна использоваться там, где y или z или t равны нулю или NA,

1 ответ

Вы можете сначала установить свои данные.

subdata <- data[which(data$y != 0 & data$z !=0 & data$t !=0 & 
!is.na(data$y) & !is.na(data$z) & !is.na(data$t)),]

Теперь у вас есть подмножество исходного фрейма данных, который не включает строки с 0 или NA. Затем вы можете агрегировать "подданные", применяя вашу пользовательскую функцию.

Другие вопросы по тегам