R prop数值数据表

时间:2015-09-11 15:03:45

标签: r

我已经搜索并试了很多方法来解决这个问题,但我找不到办法。

假设mtcars数据集,我想要做的是创建一个类似于下面的支柱表(注意下面的百分比是完全组成的):

    disp
gear  0+  100+  200+  300+  400+
   3 20%   20%   20%   20%   20%
   4  0%   25%   25%   25%   25%
   5  0%   10%   20%   30%   40%

解决方案需要将disp放入箱柜,标记箱柜,然后根据disp箱柜与gear之间的关系创建道具表。

我很抱歉没有示例代码,但我对如何执行此操作一无所知。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

disp <- paste0(findInterval(mtcars$disp, c(seq(0,400, 100),Inf)), "00+")
round(prop.table(table(mtcars$gear, disp), 1)*100, 1)
#    disp
#     100+ 200+ 300+ 400+ 500+
#   3  0.0  6.7 33.3 33.3 26.7
#   4 33.3 66.7  0.0  0.0  0.0
#   5 20.0 40.0  0.0 40.0  0.0

答案 1 :(得分:1)

我们可以使用cut生成垃圾箱,sub重命名垃圾箱

mtcars$dispR <- as.character(cut(mtcars$disp,breaks = seq(0,500,100),right=FALSE))
mtcars$dispR <- sub("\\[(\\d{1,3}).*","\\1+",mtcars$dispR)

然后,要添加比例,我们可以使用questionr::rprop

library(questionr)
rprop(table(mtcars$gear,mtcars$dispR))


               0+    100+  200+  300+  400+  Total
  3          0.0   6.7  33.3  33.3  26.7 100.0
  4         33.3  66.7   0.0   0.0   0.0 100.0
  5         20.0  40.0   0.0  40.0   0.0 100.0
  Ensemble  15.6  34.4  15.6  21.9  12.5 100.0

第二步可以在基础R中用addmargins

完成
t <- addmargins(table(mtcars$gear,mtcars$dispR))
round(t/t[,"Sum"] * 100,1)

        0+  100+  200+  300+  400+   Sum
  3     0.0   6.7  33.3  33.3  26.7 100.0
  4    33.3  66.7   0.0   0.0   0.0 100.0
  5    20.0  40.0   0.0  40.0   0.0 100.0
  Sum  15.6  34.4  15.6  21.9  12.5 100.0