Условный расчет средств разных столбцов в 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. Затем вы можете агрегировать "подданные", применяя вашу пользовательскую функцию.