To solve sorting problems, first read the data in your examples:
dat <- read.table(text = " sessionid qf qn city 1 9cf571c8faa67cad2aa9ff41f3a26e38 cat biddix fresno 2 e30f853d4e54604fd62858badb68113a caleb amos NA 3 2ad41134cc285bcc06892fd68a471cd7 daniel folkers NA 4 2ad41134cc285bcc06892fd68a471cd7 daniel folkers NA 5 63a5e839510a647c1ff3b8aed684c2a5 charles pierce flint 6 691df47f2df12f14f000f9a17d1cc40e j franz prescott+valley 7 691df47f2df12f14f000f9a17d1cc40e j franz prescott+valley 8 b3a1476aa37ae4b799495256324a8d3d carrie mascorro brea 9 bd9f1404b313415e7e7b8769376d2705 fred morales las+vegas 10 b50a610292803dc302f24ae507ea853a aurora lee NA 11 fb74940e6feb0dc61a1b4d09fcbbcb37 andrew price yorkville ",sep = "",header = TRUE)
and then you can use arrange
from plyr ,
arrange(dat,sessionid,qf,qn)
or using basic functions,
with(dat,dat[order(sessionid,qf,qn),])
source share