2015-01-26 3 views
4

Традиционный способ сделать таблицу в R:Как сделать умножение magrittr труб

data(mtcars) 

round(100*prop.table(xtabs(~ gear + cyl, data = mtcars), 1), 2) 

возвращает

cyl 
gear  4  6  8 
    3 6.67 13.33 80.00 
    4 66.67 33.33 0.00 
    5 40.00 20.00 40.00 

Чтобы повторить это с помощью magrittr трубы, я пытался:

library(magrittr) 

mtcars %>% 
xtabs(~ gear + cyl, data = .) %>% 
prop.table(., 1) 

, который отлично работает до этого момента

cyl 
gear   4   6   8 
    3 0.06666667 0.13333333 0.80000000 
    4 0.66666667 0.33333333 0.00000000 
    5 0.40000000 0.20000000 0.40000000 

, но любая попытка выполнить следующую часть, в которой я преобразовываю пропорции в проценты, а затем округляет, приводит к ошибке. Например:

mtcars %>% 
    xtabs(~ gear + cyl, data = .) %>% 
    100*prop.table(., 1) 

и

mtcars %>% 
    xtabs(~ gear + cyl, data = .) %>% 
    prop.table(., 1) %>% 
    100 * . 

все результат ошибки. Что мне не хватает?

+3

В вашем примере маржа была для строк. В 'magrittr' вы используете' columns'. 'mtcars%>% xtabs (~ gear + cyl, data =.)%>% prop.table (., 1)%>% multiply_by (100)%>% round (., 2)' – akrun

+1

см. http: // stackoverflow.com/a/27364575/3871924 – agenis

+0

@ akrun - спасибо за улов, исправленный выше. – tomw

ответ

11

Вам нужно положить * в кавычки - "*"(), а также использовать 1 в качестве аргумента в prop.table, чтобы соответствовать примеру.

mtcars %>% 
    xtabs(~ gear + cyl, data = .) %>% 
    prop.table(., 1) %>% 
    "*"(100) %>% round(.,2) 
+0

фантастический, спасибо. – tomw