[R] How to eliminate for next loops in this script
ilai
keren at math.montana.edu
Wed Mar 7 19:41:42 CET 2012
?by ?aggregate
On Tue, Mar 6, 2012 at 4:14 PM, Walter Anderson <wandrson01 at gmail.com> wrote:
> I needed to compute a complicated cross tabulation to show weighted means
> and standard deviations and the only method I could get that worked uses a
> series of nested for next loops. I know that there must be a better way to
> do so, but could use some assistance pointing the way.
>
> Here is my working, but inefficient script:
>
> library(Hmisc)
> rm(list=ls())
> load('NHTS.Rdata')
> day.wt <- day[c("HOUSEID","WTTRDFIN", "TRIPPURP","TRVLCMIN")]
> hh.wt <- hh[c("HOUSEID","WTHHFIN","HHSIZE","HHVEHCNT","HOMETYPE")]
> hh.wt$HHBIN <- with(hh.wt,{ cut(HHSIZE,
> breaks=c(0,1,2,3,4,max(HHSIZE)),labels=c("1","2","3","4","5+"),ordered_result=TRUE)})
> hh.wt$VEHBIN <- with(hh.wt,{ cut(HHVEHCNT,
> breaks=c(-1,0,1,2,max(HHVEHCNT)),labels=c("0","1","2","3+"),ordered_result=TRUE)})
> hh.wt$DUTYPE <- factor(hh.wt$HOMETYPE, exclude=c("-7","-8","-9"))
> levels(hh.wt$DUTYPE) <- c("1","1","2","2","2","2","2") # Convert home
> types to 1=SF and 2=MF
> trips <- merge(day.wt,hh.wt,by="HOUSEID")
> trips$PURPOSE <- factor(trips$TRIPPURP, exclude=c("-9"))
> trips <- trips[c("HOUSEID","HHBIN","VEHBIN","DUTYPE","PURPOSE","WTTRDFIN",
> "WTHHFIN")]
> sink('TripRates.csv')
> cat("HHBIN,VEHBIN,DUTYPE,TRIPPURP,COUNT,MEAN,STD.DEV\n")
> for (per in levels(trips$HHBIN))
> for (veh in levels(trips$VEHBIN))
> for (hom in levels(trips$DUTYPE))
> for (pur in levels(trips$PURPOSE))
> {
> cat(per)
> cat(",")
> cat(veh)
> cat(",")
> cat(hom)
> cat(",")
> cat(pur)
> cat(",")
> tmp <- subset(trips,
> trips$HHBIN == per & trips$VEHBIN == veh &
> trips$DUTYPE == hom & trips$PURPOSE == pur,
> select=c("HOUSEID","WTTRDFIN", "WTHHFIN"))
> cat(length(tmp$HOUSEID))
> cat(",")
> tmp$tr <- (tmp$WTTRDFIN/365)/tmp$WTHHFIN
> w.m <- wtd.mean(tmp$tr,weights=tmp$WTHHFIN)
> w.sd <- sqrt(wtd.var(tmp$tr, weights=tmp$WTHHFIN))
> cat(w.m)
> cat(",")
> cat(w.sd)
> cat("\n")
> }
> sink()
>
> [[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.
More information about the R-help
mailing list