R来自data.frame的计数百分比

时间:2016-09-28 21:58:58

标签: r percentage

我需要计算变量计数的百分比并将其放在矢量中

我的框架如下:

group <- c('A','A','A','B','B','B')
hight <- c('tall','tall','short','tall','short','short')

group    hight
A        tall
A        tall
A        short
B        tall
B        short
B        short

如果我得到一张跑步表(df):

     hight
group short tall
A     1    2
B     2    1

计算percanteges

t=table(df)
percentages <- data.frame(group=c('A','B'), percent = c(t[1]/(t[1]+t[2]),t[3]/(t[3]+t[4])))
percentages
percent.vector <- c(t[1]/(t[1]+t[2]),t[3]/(t[3]+t[4]))
percent.vector

我得到了我想要的东西:

    group   percent
1     A 0.3333333
2     B 0.6666667

[1] 0.3333333 0.6666667

...但我想有更好的方法可以做到这一点。对于更高范围的群体,我无法进行此计算。

如何简化百分比的计算?

由于

2 个答案:

答案 0 :(得分:2)

如果我们使用dplyr/tidyr,获得预期的方式是

library(dplyr)
library(tidyr)
df %>%
    count(group, hight) %>% 
    mutate(percent = n/sum(n)) %>% 
    select(-n) %>% 
    spread(hight, percent)
#     group     short      tall
#    <fctr>     <dbl>     <dbl>
#1      A 0.3333333 0.6666667
#2      B 0.6666667 0.3333333

数据

df <- data.frame(group, hight)

答案 1 :(得分:0)

使用旧 base-r 的解决方案

x = data.frame(group = c('A','A','A','B','B','B'),
               hight = c('tall','tall','short','tall','short','short'))

prop.table(table(x)[,1])

#        A         B 
#0.3333333 0.6666667 



prop.table(table(x)[,2])
#        A         B 
#0.6666667 0.3333333 

要提取数字,只需使用 table(x)[,1] 中的索引