2013-01-24 73 views
0

我有一個大數據框如下,這是一個較大的數據框的子集。積分數據

tree=data.frame(INVYR=tree$INVYR, 
      DIA=tree$DIA,PLOT=tree$PLOT,SPCD=tree$SPCD, 
      D.2=tree$D.2, BA.T=tree$BA.T) 

什麼,我試圖做的是計算,每人每年地塊總BA.T(圖將在隨後的幾年重新測量)。我這樣做的...

x<-aggregate(tree$BA.T,list(tree$INVYR,tree$PLOT),FUN=sum) 

x$PLOT<-x$Group.2 

x<- x[with(x, order(Group.1,Group.2)), ] 

這使我的數據幀...

x=data.frame(Group.1,Group.2,x,PLOT) 

哪裏Group.1是INVYR,Group.2是小區,x是總BA .T每年每小區。到目前爲止,這工作很好。這是我的問題開始的地方。然後我想要將它重新整合到我的原始樹data.frame中。如果我通過繪圖合併數據,由於四次重新測量,它不考慮年份和四極杆數據集。我無法運行if語句,因爲數據集的長度不相等。我希望實現的數據幀是

tree=data.frame(INVYR, DIA, PLOT, SPCD, D.2, BA.T, x) 

其中x是該記錄的給定INVYR和PLOT的總BA.T。

任何想法將不勝感激。謝謝。

編輯

INVYR=rbind(1982,1982,1982,1982,1982,1995,1995,1995,1995,1995,2000,2000,2000,2000,2000) 
PLOT=rbind(1,1,2,2,3,1,1,2,2,3,1,1,2,2,3) 
BA.T=rbind(.1,.2,.3,.4,.2,.3,.5,.8,.3,.6,.7,.2,.1,1,1.02) 
tree=data.frame(INVYR,PLOT,BA.T) 
head(tree) 
x<-aggregate(tree$BA.T,list(tree$INVYR,tree$PLOT),FUN=sum) 
x$PLOT<-x$Group.2 
x$INVYR<-x$Group.1 
x<- x[with(x, order(Group.1,Group.2)), ] 
head(x) 
+0

如果沒有適當的示例數據很難理解 –

回答

0

在解決方案是使用包reshape2

library(reshape2) 
melt(data=tree,id.vars=c('INVYR','PLOT')) ## Notice the choice of the id!the keys! 
dcast(tree.m,formula=...~variable,fun.aggregate=sum) 
    INVYR PLOT BA.T 
1 1982 1 0.30 
2 1982 2 0.70 
3 1982 3 0.20 
4 1995 1 0.80 
5 1995 2 1.10 
6 1995 3 0.60 
7 2000 1 0.90 
8 2000 2 1.10 
9 2000 3 1.02