2013-08-27 939 views
2

我有两周的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。

任何想法?

谢谢

+0

你能举个例子说明你的意思是按频率的百分比吗?谢谢 – Mayou

+0

欢迎来到SO。你能否告诉我们百分比的分母是什么? – Metrics

回答

10

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

希望这会有所帮助。

+0

非常有帮助,谢谢! – user2721827

+1

很高兴能传播data.table的福音。迄今为止我发现的一个更好的工具。 – user2627717

+1

+1羞愧问题已关闭。对于答案是“prop.table”的副本?因此我重新投票。如果要重复关闭,那肯定比这更好! –