我在R中有一个数据框,如下所示:
species sampletype content
P1 O1 10
P1 O2 12
P1 O3 9
P1 A 4
P1 A 3
P1 A 4
P2 O1 21
P2 O1 12
P2 O2 4
P2 O3 6
P2 A 7
P2 A 7
P2 A 3
P3 O1 15
P3 O1 13
P3 O1 5
P3 O1 12
P3 A 5
P3 A 7
P3 A 8
P4 O1 12
P4 O1 11
P4 O2 8
P4 O2 2
P4 A 4
P4 A 3
P4 A 4
现在我需要每个物种的O *样本的平均含量,其中O1,O2和O3是单独的样本,但是例如O1的重复出现计为一个O1(分别用于O2和O3)。 所以结果应该是这样的:
P1 = (10+12+9)/3
P2 = (21+12+4+6)/3 (since there is O1,O2 and O3)
P3 = (15+13+5+12)/1 (since only O1 occurs)
P4 = (12+11+8+2)/2 (since only O1 and O2 occur)
我已经尝试使用merge,aggregate,grep ..但我在语法和复杂性方面都很困难。
答案 0 :(得分:3)
如果我理解正确,则不需要sampletype等于A
的行。鉴于这是正确的,你可能会这样做
d <- subset(x, sampletype != "A")
ddply(d, .(species), summarise,
avg=sum(content) / length(unique(sampletype)))
species avg
1 P1 10.33333
2 P2 14.33333
3 P3 45.00000
4 P4 16.50000