2015-01-26 113 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'。 (。,1)%>%multiply_by(100)%>%round(。,2)' – akrun 2015-01-26 18:22:06

+1

请参阅http:// stackoverflow.com/a/27364575/3871924 – agenis 2015-01-26 18:22:24

+0

@ akrun - 感谢您的支持,上面已经更正。 – tomw 2015-01-26 18:25:53

回答

11

您需要把*放在引号中 - "*"(),也可以用1作为参数prop.table来匹配例子。

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

太棒了,谢谢。 – tomw 2015-01-26 18:28:34