我有一个如下的大数据帧,它是较大数据帧的子集。
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是PLOT,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