2017-01-11 5 views
1

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

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 и кодирования Noob. Не сдерживайся - я просто хочу учиться; учиться быстро и учиться правильно. Любые ответы приветствуются. Спасибо!

Я посмотрел на это: R: Further subset a selection using the pipe %>% and placeholder , но я не думаю, что получаю.

+1

Просьба [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) и желаемый результат. В идеале, можно было бы легко скопировать/вставить свой код в свою собственную консоль R. –

ответ

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)) 
+0

Спасибо, Хуан! Это именно то, что я искал. –