Как направить выходной тиббл в дальнейшие вычисления, не сохраняя тиббл как отдельный объект в R?

Мне сложно манипулировать выводом tibble, который я получаю после передачи (с использованием dplyr pipe%>%) фрейма данных через серию шагов. Этот код ниже возвращает вывод 2 x 3 тиббла:

sr_df %>% group_by(ResolutionViolated) %>% tally() %>% arrange(desc(n)) %>% mutate(total = sum(n))

Это дает мне количество запросов на обслуживание, которые нарушаются и не нарушаются (или, проще говоря, опаздывают). Это хорошо, но я хочу иметь возможность манипулировать этим же тиблом и дальше, не сохраняя тиббл как объект.

Почему? Потому что таким образом я могу фильтровать свой фрейм данных (sr_df) перед операциями с конвейером по компании / аккаунту, приоритету и другим факторам. Я могу фильтровать с помощью функции if, но этот фильтр не повлияет на вновь созданный объект тиббла. Итак, я хочу сделать что-то вроде этого:

sr_df %>% group_by(ResolutionViolated) %>% tally() %>% arrange(desc(n)) %>% mutate(total = sum(n)) %>% round(tibble[1,2]/tibble$total*100, digits = 2)

Я новичок в области программирования и программирования. Не сдерживайся - я просто хочу научиться; учись быстро и учись правильно. Любые ответы приветствуются. Спасибо!

Я посмотрел на это: R: Дальнейшее подмножество выбора используя канал% ›% и заполнитель, но я не думаю, что у меня это получилось.


person Rohit_Nalluri    schedule 11.01.2017    source источник
comment
Предоставьте воспроизводимый пример и желаемый результат. В идеале можно было бы легко скопировать / вставить ваш код в ее или его собственную консоль R.   -  person Roman Luštrik    schedule 11.01.2017


Ответы (1)


В вашем случае вы можете дополнительно манипулировать тиблом, который вы создали, используя dplyr функции.

Обратите внимание на существование mutate_at и summarize_at, которые позволяют преобразовывать набор столбцов с возможностью выбора их по положению столбца.

Это, используя . в качестве заполнителя для тибла, которым вы сейчас манипулируете, и вызывая анонимную функцию внутри mutate_at, вы получите ожидаемый результат.

sr_df %>%
  group_by(ResolutionViolated) %>%
  tally() %>% 
  arrange(desc(n)) %>% 
  mutate(total = sum(n)) %>% 
  mutate_at(.cols = c(1, 2), 
            .funs = function(column) round(column / .$total * 100, digits = 2))
person Juan Bosco    schedule 11.01.2017
comment
Спасибо, Хуан! Это было именно то, что я искал. - person Rohit_Nalluri; 30.01.2017