Thank you Peter, This solved the problem.
> edw...@web.de wrote: > > Hi, > > > > > > Unfortunately, they can't handle NA. Any suggestion? Some row for Ip > > don't have ip address. This cause an error/ wrong result. > > A quick fix could be to substitute "..." or "0.0.0.0" for the "NA" > entries. (Use something like > > ipch <- as.character(df$ip) > ipch[is.na(df$ip)] <- "..." > connection <- textConnection(ipch) > > ) > > > Eddie > > > >> library(gsubfn) > >> library(gtools) > >> library(rbenchmark) > >> > >> n <- 10000 > >> df <- data.frame( > >> a = rnorm(n), > >> b = rnorm(n), > >> c = rnorm(n), > >> ip = replicate(n, paste(sample(255, 4), collapse='.'), simplify=TRUE) > >> ) > >> > >> res <- benchmark(columns=c('test', 'elapsed'), replications=10, > > > > order=NULL, > > > >> peda = { > >> connection <- textConnection(as.character(df$ip)) > >> o <- do.call(order, read.table(connection, sep='.')) > >> close(connection) > >> df[o, ] > >> }, > >> > >> peda2 = { > >> connection <- textConnection(as.character(df$ip)) > >> dfT <- read.table(connection, sep='.', colClasses=rep("integer", > >> 4), quote="", na.strings=NULL, blank.lines.skip=FALSE) > >> close(connection) > >> o <- do.call(order, dfT) > >> df[o, ] > >> }, > >> > >> hb = { > >> ip <- strsplit(as.character(df$ip), split=".", fixed=TRUE) > >> ip <- unlist(ip, use.names=FALSE) > >> ip <- as.integer(ip) > >> dim(ip) <- c(4, nrow(df)) > >> ip <- 256^3*ip[1,] + 256^2*ip[2,] + 256*ip[3,] + ip[4,] > >> o <- order(ip) > >> df[o, ] > >> }, > >> > >> hb2 = { > >> ip <- strsplit(as.character(df$ip), split=".", fixed=TRUE) > >> ip <- unlist(ip, use.names=FALSE) > >> ip <- as.integer(ip); > >> dim(ip) <- c(4, nrow(df)) > >> o <- sort.list(ip[4,], method="radix", na.last=TRUE) > >> for (kk in 3:1) { > >> o <- o[sort.list(ip[kk,o], method="radix", na.last=TRUE)] > >> } > >> df[o, ] > >> } > >> ) > >> > >> print(res) > >> > >> test elapsed > >> 1 peda 4.12 > >> 2 peda2 4.08 > >> 3 hb 0.28 > >> 4 hb2 0.25 > >> > >> > >> On Sun, May 31, 2009 at 12:42 AM, Wacek Kusnierczyk > >> > >> <waclaw.marcin.kusnierc...@idi.ntnu.no> wrote: > >> > edwin Sendjaja wrote: > >> >> Hi VQ, > >> >> > >> >> Thank you. It works like charm. But I think Peter's code is faster. > > > > What > > > >> >> is the difference? > >> > > >> > i think peter's code is more r-elegant, though less generic. here's a > >> > quick test, with not so surprising results. gsubfn is implemented in > >> > r, not c, and it is painfully slow in this test. i also added gabor's > >> > suggestion. > >> > > >> > library(gsubfn) > >> > library(gtools) > >> > library(rbenchmark) > >> > > >> > n = 1000 > >> > df = data.frame( > >> > a=rnorm(n), > >> > b = rnorm(n), > >> > c = rnorm(n), > >> > ip = replicate(n, paste(sample(255, 4), collapse='.'), > >> > simplify=TRUE)) > >> > benchmark(columns=c('test', 'elapsed'), replications=10, > >> > order=NULL, peda={ > >> > connection = textConnection(as.character(df$ip)) > >> > o = do.call(order, read.table(connection, sep='.')) > >> > close(connection) > >> > df[o, ] }, > >> > waku=df[order(gsubfn(perl=TRUE, > >> > '[0-9]+', > >> > ~ sprintf('%03d', as.integer(x)), > >> > as.character(df$ip))), ], > >> > gagr=df[mixedorder(df$ip), ] ) > >> > > >> > # peda 0.070 > >> > # waku 7.070 > >> > # gagr 4.710 > >> > > >> > > >> > vQ > >> > > >> > ______________________________________________ > >> > R-help@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. > >> > >> ______________________________________________ > >> R-help@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. [[alternative HTML version deleted]] ______________________________________________ R-help@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.