如何基于大量虚拟变量生成R中比例的数据帧?

如何基于大量虚拟变量生成R中比例的数据帧?,r,dataframe,dplyr,R,Dataframe,Dplyr,我在R中有一个数据框,它有一个ID号,和大约5个分类变量,指示每个ID是否属于某个类别。例如: ID # category1 category2 category3 category4 category5 1 1 0 1 0 0 2 0 0 0 0 0 3 1 1 1 0

我在R中有一个数据框,它有一个ID号,和大约5个分类变量,指示每个ID是否属于某个类别。例如:

ID #  category1 category2 category3 category4 category5
1      1          0        1         0          0
2      0          0        0         0          0
3      1          1        1         0          0
我想创建一个日期框,显示每个类别中1的比例。例如,我想要的数据帧如下所示:

          category1 category2 category3 category4 category5
proportion  22.23%   16.78%    34.56%      9.31%     3.45%
然后,我还想利用这个数据帧,在x轴上创建每个类别的条形图,在y轴上创建1的比例

我想知道是否有比使用dplyr为每组计算1然后除以总观察值并合并在一起更优雅的方法,这就是我一直在做的。任何帮助都将不胜感激

多谢各位

# create some data
N = 500
df <- data.frame(ID = 1:N, 
                 category1 = sample(c(1,0), N, replace=TRUE, prob=c(0.4,0.6)),
                 category2 = sample(c(1,0), N, replace=TRUE, prob=c(0.8,0.2)),
                 category3 = sample(c(1,0), N, replace=TRUE, prob=c(0.5,0.5)),
                 category4 = sample(c(1,0), N, replace=TRUE, prob=c(0.3,0.7)),
                 category5 = sample(c(1,0), N, replace=TRUE, prob=c(0.9,0.1)))

# calculate column percentages
df.percent <- colMeans(df[,-1])

# graph barplot
b <- barplot( df.percent, 
              ylim = c(0,1), 
              col=rgb(0.2,0.4,0.6,0.6))

# Add text
text(b,  df.percent, labels=paste0(round(df.percent, 2),"%"), pos=3)

对于二元变量,比例是平均值。使用base R,colmeansy您的\u数据[-1],使用dplyr选择您的\u数据,-ID%>%mutate\u allmeans。然后你可以用条形图来做一个条形图。这些都是1吗?如果是这样的话,只需取每列的平均值乘以100即可得到百分比