R和2条件中的条件和

时间:2014-01-02 14:15:17

标签: r sum data-manipulation

我在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 ..但我在语法和复杂性方面都很困难。

1 个答案:

答案 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