我必须找出一个连续变量按因子转换为百分比的累积频率。
例如:
data <- data.frame(n = sample(1:12),
d = seq(10, 120, by = 10),
Site = rep(c("FirstSite", "SecondSite"), 6),
Plot = rep(c("Plot1", "Plot1", "Plot2", "Plot2"), 3)
)
data <- with(data, data[order(Site,Plot),])
data <- transform(data, G = ((pi * (d/2)^2) * n) / 10000)
data
n d Site Plot G
1 7 10 FirstSite Plot1 0.05497787
5 9 50 FirstSite Plot1 1.76714587
9 12 90 FirstSite Plot1 7.63407015
3 10 30 FirstSite Plot2 0.70685835
7 5 70 FirstSite Plot2 1.92422550
11 1 110 FirstSite Plot2 0.95033178
2 3 20 SecondSite Plot1 0.09424778
6 8 60 SecondSite Plot1 2.26194671
10 6 100 SecondSite Plot1 4.71238898
4 4 40 SecondSite Plot2 0.50265482
8 2 80 SecondSite Plot2 1.00530965
12 11 120 SecondSite Plot2 12.44070691
我需要通过
G
因子对Plot~Site
列进行累加频率,以便针对每个图和站点针对G
绘制d
的geom_step ggplot。我已经实现了通过以下方式来计算
G
的累积总和:data.ss <- by(data[, "G"], data[,c("Plot", "Site")], function(x) cumsum(x))
# Gtot
(data.ss.tot <- sapply(ss, max))
[1] 9.456194 3.581416 7.068583 13.948671
现在,我需要在[0..1]范围内表示每个
Plot
G
,其中1是每个G
的Plot
tot。我想我应该将G
除以Plot
Gtot
,然后对其应用新的cumsum
。怎么做?请注意,我必须针对
d
而不是G
本身来绘制此累积频率,因此这不是适当的ecdf。谢谢你。
最佳答案
我通常使用ddply
和transform
来做这种事情:
> data = ddply(data, c('Site', 'Plot'), transform, Gsum=cumsum(G), Gtot=sum(G))
> qplot(x=d, y=Gsum/Gtot, facets=Plot~Site, geom='step', data=data)
关于r - 累积频率(按因子),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8886959/