У меня есть набор данных, который начинался следующим образом:
set.seed(50)
n <- 20
s_num <- c(10,20,30)
counts <- c(0,1,2,3,4)
strata <- sample(s_num, n, replace=T)
sites <- seq(1, n, by=1)
observed <- sample(counts, n, replace=T)
df <- as.data.frame(cbind(strata,sites,observed))
Я могу сгруппировать по слоям и получить средние значения и дисперсию с помощью dplyr:
library(dplyr)
df2 <- df %>%
group_by(strata) %>%
summarise(mcount = mean(observed),
varcount = var(observed))
Проблема в том, что 0 счетчиков больше нет в базе данных:
df3 <- subset(df,observed != 0)
Таким образом, среднее значение и дисперсия теперь неверны:
df4 <- df3 %>%
group_by(strata) %>%
summarise(mcount = mean(observed),
varcount = var(observed))
Но у меня есть количество сайтов:
site_count <- df %>%
group_by(strata) %>%
summarise(count_plot = n_distinct(sites))
Могу ли я по-прежнему использовать dplyr для расчета средней дисперсии без нулей? Среднее на самом деле не так уж сложно, объединив количество сайтов с df; дисперсия сложнее. Я могу добавить обратно 0 строк, если это необходимо, но хотел посмотреть, есть ли простой способ обойти это, если это возможно. Спасибо.