Группировка и вычисление среднего ненулевого значения - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь использовать функцию группировки и суммирования для вычисления средних значений, отличных от нуля.

Пример: =

Group  Val
A       3
A       0
A       3
B       1 
B       0 
B       1
test %>% 
    group_by(Group) %>%
    summarise(Mean = mean(test$Val[ Val  != 0 ])

Желаемый результат должен быть

Group    Mean 
A         3
B         1

Вместо этого я получаю

Group    Mean 
A         2
B         0.66

1 Ответ

0 голосов
/ 20 июня 2019

Чтобы ответить на оба ваших вопроса, нам нужно создать новый образец данных:

set.seed(123)
test <- data.frame(Group = rep(c("A", "B"), 5), 
                   Val = replicate(10, sample(c(-3:3), 1, replace = TRUE)))

Как сказал @Jon Spring, вы можете получить среднее значение для каждой группы без нулей, отфильтровав их:

require(tidyverse)

test %>% 
  group_by(Group) %>%
  filter(Val != 0) %>%
  summarise(Mean = mean(Val))

Чтобы получить среднее значение без нулей для каждой группы и для знака - мы можем создать новую переменную для знака, а теперь group_by для группы и знака:

test %>% 
  mutate(sign = ifelse(Val > 0, "positive", "negative")) %>% 
  group_by(Group, sign) %>%
  filter(Val != 0) %>%
  summarise(Mean = mean(Val))

Результат:

  Group sign      Mean
  <fct> <chr>    <dbl>
1 A     negative -1   
2 A     positive  3   
3 B     negative -3   
4 B     positive  2.67
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...