# build a sample data frame illustrating the problem ids<-c(rep(1234,5),rep(5436,3),rep(7864,4)) years<-c(seq(1990,1994,by=1),seq(1991,1993,by=1),seq(1990,1993,by=1)) data<-seq(14,25,by=1) data[6]<-NA DF<-data.frame(Id=ids,Year=years,Data=data) DF Id Year Data 1 1234 1990 14 2 1234 1991 15 3 1234 1992 16 4 1234 1993 17 5 1234 1994 18 6 5436 1991 NA 7 5436 1992 20 8 5436 1993 21 9 7864 1990 22 10 7864 1991 23 11 7864 1992 24 12 7864 1993 25
# The result wanted is a sum of DF$Data, by DF$Id. collect the sum of $Data for each $Id # the result would take the form # Id, sum for each Id # Try using BY result<-by(DF$Data,INDICES=Data$Id,FUN=sum,na.rm=T) Error in names(IND) <- deparse(substitute(INDICES))[1L] : 'names' attribute [1] must be the same length as the vector [0] idx<-as.list(Data$Id) idx2<-list(1234,1234,1234,1234,1234,5436,5436,5436,7864,7864,7864,7864) result<-by(DF$Data,INDICES=idx,FUN=sum,na.rm=T) result [1] 215 result<-by(DF$Data,INDICES=idx2,FUN=sum,na.rm=T) Error in tapply(1L:12L, list(1234, 1234, 1234, 1234, 1234, 5436, 5436, : arguments must have same length > idx list() > idx[1] [[1]] NULL > idx2 [[1]] [1] 1234 [[2]] [1] 1234 [[3]] [1] 1234 [[4]] [1] 1234 [[5]] [1] 1234 [[6]] [1] 5436 [[7]] [1] 5436 [[8]] [1] 5436 [[9]] [1] 7864 [[10]] [1] 7864 [[11]] [1] 7864 [[12]] [1] 7864 aggregate(DF$Data, by=idx2,sum,na.rm=T) Error in aggregate.data.frame(as.data.frame(x), ...) : arguments must have same length ################################ The instruction that the INDICES must have the same length is confusing me. the number of indices will always be less than the number of rows because the indices are repeated, we want to sum over multiple instances of the indices to collect the Sum by index. I'm confused. [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.