Вектор округления в выражении pipe создает только 1-й элемент в векторе - PullRequest
0 голосов
/ 06 марта 2019

У меня есть тиббл, который я сгруппировал в средние по группам и хочу извлечь максимальное среднее и минимальное среднее в двухэлементный вектор.

Мне также нужно определить, равна ли разница между максимальным и минимальным значением <= 1, тогда мне нужно округлить вектор до 3 цифр, если нет, то я могу округлить до целых чисел. </p>

По какой-то причине, когда я делаю это в выражении pipe, он возвращает только 1-й округленный элемент. Что вызывает это поведение?

library(tidyverse)

set.seed(123)

tibble(x = runif(30, min = 205, max = 1440),
       y = rep(paste0("Group",1:5), each = 6)) %>% 
  group_by(y) %>% 
  summarize(mean = mean(x)) %>% 
  {c(min(.$mean), max(.$mean))} %>% 
  {ifelse(diff(.) <= 1, round(., digits = 2), round(., digits = 0))}
#> [1] 728

# Expected Behavior
c(728.0433, 1131.1561) %>% 
  round(digits = 0)
#> [1]  728 1131

1 Ответ

0 голосов
/ 07 марта 2019

Вы можете сделать:

tibble(x = runif(30, min = 205, max = 1440),
       y = rep(paste0("Group",1:5), each = 6)) %>% 
  group_by(y) %>% 
  summarize(mean = mean(x)) %>% 
  {c(min(.$mean), max(.$mean))} %>% 
  {ifelse(rep(diff(.) <= 1, 2), round(., digits = 2), round(., digits = 0))}

или

tibble(x = runif(30, min = 205, max = 1440),
       y = rep(paste0("Group",1:5), each = 6)) %>% 
  group_by(y) %>% 
  summarize(mean = mean(x)) %>% 
  {c(min(.$mean), max(.$mean))} %>% 
  {if(diff(.) <= 1) round(., digits = 2) else round(., digits = 0)}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...