Hi All, Year Area Q Bin FD I have a large dataset I need to re-structure. It looks something like this: 2000 1 1 5 0 2000 1 1 10 1 2000 1 1 15 23 2000 1 1 20 12 2000 1 1 25 1 2000 2 1 5 1 2000 2 1 10 3 2000 2 1 15 15 2000 2 1 20 11 2000 2 1 25 3 2000 1 2 5 0 2000 1 2 10 1 2000 1 2 15 23 2000 1 2 20 12 2000 1 2 25 1 2000 2 2 5 1 2000 2 2 10 3 2000 2 2 15 15 2000 2 2 20 11 2000 2 2 25 3 2001 … 2011 And I need to create different vectors (Bin, FD) summing by year and/or by area; For example, I need a new dataset: Bin, FD[Year=2000,Area=1], FD[Year=2000,Area=2], FD[Year=2000], FD[Year=2001,Area=1], etc. Any help really appreciated!! NG [[alternative HTML version deleted]]
HI, I assume that you have a data.frame structure. dat1<- structure(list(Year = c(2000L, 2000L, 2000L, 2000L, 2001L, 2001L, 2001L, 2001L, 2001L), Area = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), Q = c(1L, 1L, 1L, 1L, 25L, 1L, 1L, 1L, 1L), Bin = c(5L, 10L, 15L, 20L, 1L, 5L, 10L, 15L, 20L), FD = c(0L, 1L, 23L, 12L, 4L, 1L, 3L, 15L, 4L)), .Names = c("Year", "Area", "Q", "Bin", "FD"), class = "data.frame", row.names = c(NA, -9L)) ?aggregate(.~Year+Area,data=dat1[,-3],sum) #? Year Area Bin FD #1 2000??? 1? 50 36 #2 2001??? 1?? 1? 4 #3 2001??? 2? 50 23 #or library(plyr) ddply(dat1,.(Year,Area),colwise(sum,c("Bin","FD"))) #? Year Area Bin FD #1 2000??? 1? 50 36 #2 2001??? 1?? 1? 4 #3 2001??? 2? 50 23 A.K. ----- Original Message ----- From: Nicolas L. Gutierrez <nicolasg at uw.edu> To: r-help at r-project.org Cc: Sent: Thursday, April 4, 2013 8:42 AM Subject: [R] summing vectors Hi All, Year Area Q Bin FD ? ? ? I have a large dataset I need to re-structure. It looks something like this: 2000 1 1 5 0? 2000 1 1 10 1? 2000 1 1 15 23? 2000 1 1 20 12? 2000 1 1 25 1? 2000 2 1 5 1? 2000 2 1 10 3? 2000 2 1 15 15? 2000 2 1 20 11? 2000 2 1 25 3? 2000 1 2 5 0? 2000 1 2 10 1? 2000 1 2 15 23? 2000 1 2 20 12? 2000 1 2 25 1? 2000 2 2 5 1? 2000 2 2 10 3? 2000 2 2 15 15? 2000 2 2 20 11? 2000 2 2 25 3? 2001? ? ?? ? 2011 ? And I need to create different vectors (Bin, FD) summing by year and/or by area; For example, I need a new dataset: Bin,? FD[Year=2000,Area=1], FD[Year=2000,Area=2], FD[Year=2000],? FD[Year=2001,Area=1], etc. Any help really appreciated!! NG ??? [[alternative HTML version deleted]] ______________________________________________ R-help at 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.
You could also use: library(data.table) dat2<- data.table(dat1) dat2<-dat2[,setdiff(colnames(dat2),"Q"),with=FALSE] ?dat2[,lapply(.SD,sum),by=c("Year","Area")] #?? Year Area Bin FD #1: 2000??? 1? 50 36 #2: 2001??? 1?? 1? 4 #3: 2001??? 2? 50 23 A.K. ----- Original Message ----- From: arun <smartpink111 at yahoo.com> To: Nicolas L. Gutierrez <nicolasg at uw.edu> Cc: R help <r-help at r-project.org> Sent: Thursday, April 4, 2013 10:08 AM Subject: Re: [R] summing vectors HI, I assume that you have a data.frame structure. dat1<- structure(list(Year = c(2000L, 2000L, 2000L, 2000L, 2001L, 2001L, 2001L, 2001L, 2001L), Area = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), Q = c(1L, 1L, 1L, 1L, 25L, 1L, 1L, 1L, 1L), Bin = c(5L, 10L, 15L, 20L, 1L, 5L, 10L, 15L, 20L), FD = c(0L, 1L, 23L, 12L, 4L, 1L, 3L, 15L, 4L)), .Names = c("Year", "Area", "Q", "Bin", "FD"), class = "data.frame", row.names = c(NA, -9L)) ?aggregate(.~Year+Area,data=dat1[,-3],sum) #? Year Area Bin FD #1 2000??? 1? 50 36 #2 2001??? 1?? 1? 4 #3 2001??? 2? 50 23 #or library(plyr) ddply(dat1,.(Year,Area),colwise(sum,c("Bin","FD"))) #? Year Area Bin FD #1 2000??? 1? 50 36 #2 2001??? 1?? 1? 4 #3 2001??? 2? 50 23 A.K. ----- Original Message ----- From: Nicolas L. Gutierrez <nicolasg at uw.edu> To: r-help at r-project.org Cc: Sent: Thursday, April 4, 2013 8:42 AM Subject: [R] summing vectors Hi All, Year Area Q Bin FD ? ? ?? I have a large dataset I need to re-structure. It looks something like this: 2000 1 1 5 0? 2000 1 1 10 1? 2000 1 1 15 23? 2000 1 1 20 12? 2000 1 1 25 1? 2000 2 1 5 1? 2000 2 1 10 3? 2000 2 1 15 15? 2000 2 1 20 11? 2000 2 1 25 3? 2000 1 2 5 0? 2000 1 2 10 1? 2000 1 2 15 23? 2000 1 2 20 12? 2000 1 2 25 1? 2000 2 2 5 1? 2000 2 2 10 3? 2000 2 2 15 15? 2000 2 2 20 11? 2000 2 2 25 3? 2001? ? ?? ? 2011 ? And I need to create different vectors (Bin, FD) summing by year and/or by area; For example, I need a new dataset: Bin,? FD[Year=2000,Area=1], FD[Year=2000,Area=2], FD[Year=2000],? FD[Year=2001,Area=1], etc. Any help really appreciated!! NG ??? [[alternative HTML version deleted]] ______________________________________________ R-help at 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.
HI Nicolas, Your dput() looks like corrupted. #changed dat2<- structure(list(Year = c(2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2001L), Area = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), Q = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L), Bin = c(5L, 10L, 15L, 20L, 5L, 10L, 15L, 20L, 5L, 10L, 15L, 20L, 5L, 10L), ??? FD = c(0L, 1L, 23L, 12L, 4L, 1L, 3L, 15L, 4L, 8L, 12L, 23L, ??? 12L, 8L)), .Names = c("Year", "Area", "Q", "Bin", "FD"), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14")) library(reshape2) res<-dcast(dat2,Bin~Area+Year,value.var="FD",sum) ?names(res)[grep("^\\d+",names(res))]<-paste0("FD_",names(res)[grep("^\\d+",names(res))]) ?res #? Bin FD_1_2000 FD_2_2000 FD_2_2001 #1?? 5???????? 4??????? 16???????? 0 #2? 10???????? 2???????? 8???????? 8 #3? 15??????? 26??????? 12???????? 0 #4? 20??????? 27??????? 23???????? 0 I am not sure 8+8.., 12+.. 23+.. .? I hope that is from the bigger dataset. A.K. ________________________________ From: Nicolas L. Gutierrez <nicolasg at uw.edu> To: arun <smartpink111 at yahoo.com> Sent: Thursday, April 4, 2013 10:49 AM Subject: Re: [R] summing vectors Hi Arun, Thanks for your fast response.. I have included what I need following your mock dataset: ? dat2<- structure(list(Year = c(2000L, 2000L, 2000L, 2000L, 2000L, 2000L, ?2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2001L), Area = c(1L, 1L, 1L, 1L, 1L, 1L,1L , 1L, 2L, 2L, 2L, 2L, 2L,2L), Q = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L,2L), Bin = c(5L, ?10L, 15L, 20L, 5L, 10L, 15L, 20L, 5L, 10L, 15L, 20L, 5L, 10L), FD = c(0L, 1L, 23L, 12L, ?4L, 1L, 3L, 15L, 4L,8L, 12L, 23L, 12L, 8L, 1L)), .Names = c("Year", "Area", "Q", "Bin", ?"FD"), class = "data.frame", row.names = c(NA, -14L)) I need: ? Bin? ?FD_2000_1? ?FD_2000_2???? FD_2000_3 ... FD_2012_3 5???????? 4??????????????????? 4+12 10????? ?2??????????????????? 8+8 15????? 26??????????????????12+... 20??????27???????????? ???? 23+... ? Basically the column FD_2000_1groups FD by Bin? for year 2000 and Area 1. I have?12 years in my dataset, about 20?areas.?Sorry if?I'm being confusing. ? Cheers, NG? On Thu, Apr 4, 2013 at 3:20 PM, arun <smartpink111 at yahoo.com> wrote:> > >You could also use: >library(data.table) >dat2<- data.table(dat1) >dat2<-dat2[,setdiff(colnames(dat2),"Q"),with=FALSE] >?dat2[,lapply(.SD,sum),by=c("Year","Area")] > >#?? Year Area Bin FD >#1: 2000??? 1? 50 36 >#2: 2001??? 1?? 1? 4 >#3: 2001??? 2? 50 23 >A.K. > > >----- Original Message ----- > >From: arun <smartpink111 at yahoo.com> >To: Nicolas L. Gutierrez <nicolasg at uw.edu> >Cc: R help <r-help at r-project.org> >Sent: Thursday, April 4, 2013 10:08 AM >Subject: Re: [R] summing vectors > >HI, > >I assume that you have a data.frame structure. >dat1<- structure(list(Year = c(2000L, 2000L, 2000L, 2000L, 2001L, 2001L, >2001L, 2001L, 2001L), Area = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, >2L), Q = c(1L, 1L, 1L, 1L, 25L, 1L, 1L, 1L, 1L), Bin = c(5L, >10L, 15L, 20L, 1L, 5L, 10L, 15L, 20L), FD = c(0L, 1L, 23L, 12L, >4L, 1L, 3L, 15L, 4L)), .Names = c("Year", "Area", "Q", "Bin", >"FD"), class = "data.frame", row.names = c(NA, -9L)) > >?aggregate(.~Year+Area,data=dat1[,-3],sum) >#? Year Area Bin FD >#1 2000??? 1? 50 36 >#2 2001??? 1?? 1? 4 >#3 2001??? 2? 50 23 > >#or >library(plyr) >ddply(dat1,.(Year,Area),colwise(sum,c("Bin","FD"))) >#? Year Area Bin FD >#1 2000??? 1? 50 36 >#2 2001??? 1?? 1? 4 >#3 2001??? 2? 50 23 >A.K. > > > >----- Original Message ----- >From: Nicolas L. Gutierrez <nicolasg at uw.edu> >To: r-help at r-project.org >Cc: >Sent: Thursday, April 4, 2013 8:42 AM >Subject: [R] summing vectors > >Hi All, >Year Area Q Bin FD >? ? ?? I have a large dataset I need to re-structure. It looks something >like this: 2000 1 1 5 0? 2000 1 1 10 1? 2000 1 1 15 23? 2000 1 1 20 12? 2000 >1 1 25 1? 2000 2 1 5 1? 2000 2 1 10 3? 2000 2 1 15 15? 2000 2 1 20 11? 2000 >2 1 25 3? 2000 1 2 5 0? 2000 1 2 10 1? 2000 1 2 15 23? 2000 1 2 20 12? 2000 >1 2 25 1? 2000 2 2 5 1? 2000 2 2 10 3? 2000 2 2 15 15? 2000 2 2 20 11? 2000 >2 2 25 3? 2001? ? ?? ? 2011 > > > > >? And I need to create different vectors (Bin, FD) summing by year and/or >by area; For example, I need a new dataset: > >Bin,? FD[Year=2000,Area=1], >FD[Year=2000,Area=2], FD[Year=2000],? FD[Year=2001,Area=1], etc. > >Any help really appreciated!! > >NG > >??? [[alternative HTML version deleted]] > > >______________________________________________ >R-help at 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. >