I have panel data in the following form: TIME X1 S1 1 1 0.99 1 2 0.50 1 3 0.01 2 3 0.99 2 1 0.99 2 2 0.25 3 3 0.75 3 2 0.50 3 1 0.25 ... ... ...... And desire a new vector of observations in which one column (S1 above) is sorted for each second from least to largest. That is, a new vector (L1 below) of the form: TIME X1 S1 L1 1 1 0.99 0.01 1 2 0.50 0.50 1 3 0.01 0.99 2 3 0.99 0.25 2 1 0.99 0.99 2 2 0.25 0.99 3 3 0.75 0.25 3 2 0.50 0.50 3 1 0.25 0.75 ... ... ...... ..... Sorry for the NOOB question, but any help would be great. Curtis Kephart -- View this message in context: http://r.789695.n4.nabble.com/Sorting-Panel-Data-by-Time-tp4017271p4017271.html Sent from the R help mailing list archive at Nabble.com.
On Nov 8, 2011, at 2:58 PM, economicurtis wrote:> I have panel data in the following form: > > TIME X1 S1 > 1 1 0.99 > 1 2 0.50 > 1 3 0.01 > 2 3 0.99 > 2 1 0.99 > 2 2 0.25 > 3 3 0.75 > 3 2 0.50 > 3 1 0.25 > ... ... ...... > > And desire a new vector of observations in which one column (S1 > above) is > sorted for each second from least to largest.> dat$L1 <- unlist (with( dat, tapply(S1, TIME, sort)) ) > dat TIME X1 S1 L1 1 1 1 0.99 0.01 2 1 2 0.50 0.50 3 1 3 0.01 0.99 4 2 3 0.99 0.25 5 2 1 0.99 0.99 6 2 2 0.25 0.99 7 3 3 0.75 0.25 8 3 2 0.50 0.50 9 3 1 0.25 0.75> > That is, a new vector (L1 below) of the form: > > TIME X1 S1 L1 > 1 1 0.99 0.01 > 1 2 0.50 0.50 > 1 3 0.01 0.99 > 2 3 0.99 0.25 > 2 1 0.99 0.99 > 2 2 0.25 0.99 > 3 3 0.75 0.25 > 3 2 0.50 0.50 > 3 1 0.25 0.75 > ... ... ...... ..... > > Sorry for the NOOB question, but any help would be great. > > Curtis Kephart > > -- > View this message in context: http://r.789695.n4.nabble.com/Sorting-Panel-Data-by-Time-tp4017271p4017271.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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.David Winsemius, MD West Hartford, CT
Here's another approach using the plyr and data.table packages, where df is the name I gave to your example data: # plyr library('plyr') ddply(df, .(TIME), mutate, L1 = sort(S1)) # Another way with the data.table package: library('data.table') dt <- data.table(df, key = 'TIME') dt[, list(X1, S1, L1 = sort(S1)), by = 'TIME'] HTH, Dennis On Tue, Nov 8, 2011 at 11:58 AM, economicurtis <curtisesjunk at gmail.com> wrote:> I have panel data in the following form: > > TIME ? X1 ? ? S1 > ?1 ? ? ? 1 ? ? ?0.99 > ?1 ? ? ? 2 ? ? ?0.50 > ?1 ? ? ? 3 ? ? ?0.01 > ?2 ? ? ? 3 ? ? ?0.99 > ?2 ? ? ? 1 ? ? ?0.99 > ?2 ? ? ? 2 ? ? ?0.25 > ?3 ? ? ? 3 ? ? ?0.75 > ?3 ? ? ? 2 ? ? ?0.50 > ?3 ? ? ? 1 ? ? ?0.25 > ... ? ? ?... ? ? ...... > > And desire a new vector of observations in which one column (S1 above) is > sorted for each second from least to largest. > > That is, a new vector (L1 below) of the form: > > TIME ? X1 ? ? S1 ? ? ? L1 > ?1 ? ? ? 1 ? ? ?0.99 ? ?0.01 > ?1 ? ? ? 2 ? ? ?0.50 ? ?0.50 > ?1 ? ? ? 3 ? ? ?0.01 ? ?0.99 > ?2 ? ? ? 3 ? ? ?0.99 ? ?0.25 > ?2 ? ? ? 1 ? ? ?0.99 ? ?0.99 > ?2 ? ? ? 2 ? ? ?0.25 ? ?0.99 > ?3 ? ? ? 3 ? ? ?0.75 ? ?0.25 > ?3 ? ? ? 2 ? ? ?0.50 ? ?0.50 > ?3 ? ? ? 1 ? ? ?0.25 ? ?0.75 > ... ? ? ?... ? ? ...... ? ?..... > > Sorry for the NOOB question, but any help would be great. > > Curtis Kephart > > -- > View this message in context: http://r.789695.n4.nabble.com/Sorting-Panel-Data-by-Time-tp4017271p4017271.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >