sorter | R Documentation |
A function to sort an longCat
object created by longCat
. sorter
must be used directly when stratified plots of subgroups are desired, or when sorting other than the default is desired. Otherwise, sorter
is used internally with the defaults by longCatPlot
if lc$sorted=FALSE
. If an object has already been sorted (lc$sorted=TRUE
), sorter
will not resort it but will print a code example of how to use multiple sortings.
sorter(
lc,
ascending = TRUE,
whichColumns = NULL,
num = TRUE,
mindur = NULL,
igrpt = FALSE,
customSort = NULL,
initFirst = FALSE,
group = NULL,
groupLabels = NULL,
ggap = NULL
)
lc |
An object of class |
ascending |
Logical indicating if sorting should be done in ascending order. Default is |
whichColumns |
A numeric vector indicating which columns in |
num |
See |
mindur |
See |
igrpt |
Should |
customSort |
A vector of the same length as the number of rows in |
initFirst |
If |
group |
A vector indicating group membership, of the same length as the number of rows in |
groupLabels |
Numeric or character labels for the groups specified in |
ggap |
A number between zero and one indicating the proportion of blank rows to be plotted between groups when |
Returns an object of class longCat
where lc$sorted=TRUE
.
Stephen J. Tueller
Tueller, S. J., Van Dorn, R. A., & Bobashev, G. V. (2016). Visualization of categorical longitudinal and times series data (Report No. MR-0033-1602). Research Triangle Park, NC: RTI Press. http://www.rti.org/publication/visualization-categorical-longitudinal-and-times-series-data
longCat
and longCatPlot
for further functionality.
### create a plot like that in Figure 3 from Tueller, Van Dorn, & Bobashev (2016)
par(mfrow=c(1,2), bg='cornsilk3')
times <- c(1,100,200,300,400,500,600)
f3lc <- longCat(example3, times); f3lc$sorted <- TRUE; f3lc$y.sorted <- f3lc$y
longCatPlot(f3lc, main='Unsorted', colScheme='heat', lwd=2, legendBuffer=.2)
f3lc <- longCat(example3, times)
longCatPlot(f3lc, main='Sorted', colScheme='heat', lwd=2, legendBuffer=.2)
### sort with a grouping variable and plot
par(mfrow=c(1,1), bg='cornsilk3', mar=c(5.1, 4.1, 4.1, 9.1), xpd=TRUE)
times <- c(1,100,200,300,400,500,600)
lc <- longCat(example3, times)
group <- sample(1:3, nrow(example3), replace=TRUE)
grouplc <- sorter(lc, group=group, groupLabels=1:3)
cols <- longCatPlot(grouplc, groupBuffer=.15, main='Grouped Data', colScheme='heat',
lwd=2, legendBuffer=0)
legend(610, 130, legend=1:5, col=cols, lty=1, lwd=2)
par(bg='transparent', mar = c(5, 4, 4, 2) + 0.1, xpd=FALSE)
### using the sorted data from the previous plot, repeate using ggplot2
# following the example of Figure 4 of bdemarest's answer on
# https://stackoverflow.com/questions/11513149/
# good-ways-to-visualize-longitudinal-categorical-data-in-r/
grouplc.df <- data.frame(id=1:nrow(grouplc$group.sorted),
group=grouplc$group.sorted[,1], grouplc$y.sorted)
grouplc.long <- reshape(grouplc.df,
varying = names(grouplc$y.sorted),
v.names = "score",
timevar = "time",
times = times[1:ncol(grouplc$y.sorted)],
direction = "long")
grouplc.long$score <- factor(grouplc.long$score)
grouplc.long$group <- factor(grouplc.long$group, level=3:1)
# remove NA's introduced using group option in sorter
grouplc.long <- na.omit(grouplc.long)
library(ggplot2)
ggplot(grouplc.long, aes(x=time, y=id, fill=score)) +
geom_tile(colour="transparent") +
scale_fill_manual(values=cols) +
facet_grid(group ~ ., space="free_y", scales="free_y")
### sort with a grouping variable and events and plot
times <- c(1,100,200,300,400,500,600)
set.seed(45962)
events <- matrix(sample(1:3, nrow(example3)*2, replace=TRUE), nrow(example3), 2)
set.seed(23498)
event.times <- matrix(sample(min(times):max(times), nrow(example3)*2, replace=TRUE),
nrow(example3), 2)
labels <- c('Street', 'Drug Tx', 'Jail', 'Prison', 'Unknown')
eventLabels=c('Arrest', 'Drug Test', 'Hearing')
eventlc <- longCat(example3, times=times, Labels=labels,
events=events, event.times=event.times,
eventLabels=eventLabels)
set.seed(4290)
groupevent <- sample(1:3, nrow(example3), replace=TRUE)
groupeventlc <- sorter(eventlc, group=groupevent)
par(mfrow=c(1,1), bg='cornsilk3', mar=c(5.1, 4.1, 4.1, 12.1), xpd=TRUE)
cols <- longCatPlot(groupeventlc, legendBuffer=0, groupBuffer=0.15,
main='Grouping and Events')
legend(610, 130, legend=groupeventlc$Labels, lty=1, col=cols, lwd=2)
legend(610, 60, legend=groupeventlc$eventLabels,
pch=1:length(groupeventlc$eventLabels))
par(bg='transparent', mar = c(5, 4, 4, 2) + 0.1, xpd=FALSE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.