在R中计算频率百分比

4
我有两周的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。
有任何想法吗?
谢谢

请问您能否举个例子来解释一下“按类别计算频率的百分比”是什么意思?谢谢。 - Mayou
欢迎来到SO。请问百分比的分母是什么? - Metrics
1个回答

13

您可以尝试使用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

希望这可以帮助到你。


1
很高兴传播data.table的福音。这是我迄今为止发现的最好的工具之一。 - user2627717
1
很遗憾这个问题被关闭了。而且还是一个已有答案prop.table的重复问题?所以我投了重新开启的票。如果一定要作为重复问题关闭,肯定会有比这个更好的选择! - Matt Dowle
2
顺便问一下,这个不能用一行代码完成吗?data[, percen := freq/sum(freq), by=list(name,cat1)] - Matt Dowle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接