计算R中的频率百分比

时间:2013-08-27 14:02:49

标签: r

我有两周的R经验,非常感谢您的帮助。

我有一个用count()构造的数据表,我想按类别计算频率的百分比。 所以如果这是我的数据框:

name cat1 cat2 freq
A       1   1   32
A       1   0   56
A       0   1   36
A       0   0   25
B       1   1   14
B       1   0   68
B       0   1   58
B       0   0   90

我想按名称和cat1计算百分比(cat2 = 1,0是总数)。 我有一些数据框,对于一些名称,它可能只有cat1 = 0& cat2 = 0,由于结构不同,我不能直接做到这一点。

例如,第一行是(32 /(32 + 56))* 100,第四行(25 /(25 + 36))* 100。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:12)

您可能想尝试使用data.table。如果使用大型表格,您还可以获得速度优势。

library(data.table)
#if your data is already stored as a data frame, 
#you can always skip the next step and continue with data <- data.table(data)

data <- data.table(name=rep(c("A","B"), each=4), cat1=c(1,1,0,0,1,1,0,0), cat2=c(1,0,1,0,1,0,1,0), freq=c(32,56,36,25,14,68,58,90))
data[, percen := sum(freq), by=list(name,cat1)]
data[, percen := freq/percen]
data
> data
   name cat1 cat2 freq  percen
1:    A    1    1   32 0.3636364
2:    A    1    0   56 0.6363636
3:    A    0    1   36 0.5901639
4:    A    0    0   25 0.4098361
5:    B    1    1   14 0.1707317
6:    B    1    0   68 0.8292683
7:    B    0    1   58 0.3918919
8:    B    0    0   90 0.6081081

希望这有帮助。