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.
Sorting Panel Data by Time
4 messages · economicurtis, David Winsemius, Dennis Murphy
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.
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20111108/27f658ea/attachment.pl>