我有两周的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 :(得分: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
希望这有帮助。