markleeds at verizon.net
2009-May-04 20:40 UTC
[R] to the person who asked about dividing by the base row
to whomever that was. i deleted your email but I think below does what you want. as always, there's probably some improvement that could be done. whether it's ? minor or major, i'm not sure ? also, 3 things:? ? A)there are some Inf's in the output because of division by zero but I wasn't sure how you wanted to handle that. B) it also assumes that an n=1 always exists and you should probably have some error checking in there for when it doesn't.? C) When i tried to condense it to below, I got an error that division is only valid for equal sized data frames and I'm not sure why so maybe someone can say something about that ? temp <- lapply(split(DF,list(DF$sp,DF$wg)), function(.df) { ? ? ? .df[(.df$n != 1),c(3,4,5,6,7)] <- .df[(.df$n ! 1),c(3,4,5,6,7)]/.df[(.df$n == 1),c(3,4,5,6,7)] ? ? ? .df }) # WORKING CODE #========================================================================== ? DF <- read.table(textConnection("sp wg n v.realtime v.cputime v.tcputime v.idletime v.nswtch 9 0 1 1 28.61300 28.61 28.6039 0.00000e+00 407 1563 0 1 2 15.20270 30.38 28.5981 9.80523e-01 483 3128 0 1 4 12.50930 50.00 28.6053 1.07877e+01 489 4682 0 1 6 12.10260 72.55 28.6193 2.20203e+01 488 6241 0 1 8 12.11510 96.80 28.6448 3.41126e+01 494 121 0 10 1 28.61530 28.60 28.6056 0.00000e+00 1996 1684 0 10 2 14.33530 28.66 28.6003 2.96437e-02 1908 3241 0 10 4 7.27129 29.05 28.6002 2.31302e-01 2110 4801 0 10 6 4.91522 29.42 28.6002 4.25931e-01 2134 6367 0 10 8 3.79337 30.25 28.6032 8.42412e-01 2245"),header=TRUE) print(DF) temp <- lapply(split(DF,list(DF$sp,DF$wg)), function(.df) { ? ? ? .df$v.realtime[.df$n != 1] <- .df$v.realtime[.df$n ! 1]/.df$v.realtime[.df$n == 1] ? ? ? .df$v.cputime[.df$n != 1] <- .df$v.cputime[.df$n ! 1]/.df$v.cputime[.df$n == 1] ? ? ? .df$v.tcputime[.df$n != 1] <- .df$v.tcputime[.df$n? ! 1]/.df$v.tcputime[.df$n == 1] ? ? ? .df$v.idletime[.df$n != 1] <- .df$v.idletime[.df$n ! 1]/.df$v.idletime[.df$n == 1] ? ? ? .df$v.nswtch[.df$n != 1] <- .df$v.nswtch[.df$n ! 1]/.df$v.nswtch[.df$n == 1] ? ? ? .df }) result <- do.call(rbind,temp) rownames(result) <- NULL print(result)
Reasonably Related Threads
- Calculating relative ratios in a data frame..
- [PATCH][cpufreq] Xen support for the ondemand governor [1/2] (hypervisor code)
- [PATCH][cpufreq] Xen support for the ondemand governor [2/2] (linux)
- [PATCH][retry 2][cpufreq] Xen support for the ondemand governor in Linux dom0
- Samba -> WinXP: slow transfers, partial solution