[R] First value in a row

William Dunlap wdunlap at tibco.com
Tue Jul 24 18:08:14 CEST 2012


If there are a lot more rows than columns in your data.frame then looping
over columns is faster than looping over rows.   Comparing 
f2 <- function (dataFrame) 
{
    retval <- dataFrame[, 1]
    for (col in dataFrame[-1]) {
        na <- is.na(retval)
        if (!any(na)) 
            break
        retval[na] <- col[na]
    }
    retval
}
to the looping over row version
f1 <- function (dataFrame)  apply(dataFrame, 1, function(x) x[!is.na(x)][1])

for a 250,000 row by 3 coludata.frame, f1 takes 2.48 seconds and f1 0.02.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
> Behalf Of Henrik Singmann
> Sent: Tuesday, July 24, 2012 1:40 AM
> To: r-help at stat.math.ethz.ch
> Subject: Re: [R] First value in a row
> 
> Hi Camilo,
> 
> as you want to work on all rows, apply() is your friend.
> In the following, I use an anonymous function getting the first non-na
> value while looping over each row:
> 
> dat <- read.table(text = "
> Lat   Lon  x1   x2  x3
> 01    10   NA   NA  .1
> 01    11   NA   .2  .3
> 01    12   .4   .5  .6
> ", header = TRUE)
> 
> apply(dat[,-(1:2)], 1, function(x) x[!is.na(x)][1])
> 
> gives:
> [1] 0.1 0.2 0.4
> 
> Cheers,
> Henrik
> 
> Camilo Mora schrieb:
> > Hi.
> >
> > This is likely a trivial problem but have not found a solution. Imagine
> > the following dataframe:
> >
> > Lat   Lon  x1   x2  x3
> > 01    10   NA   NA  .1
> > 01    11   NA   .2  .3
> > 01    12   .4   .5  .6
> >
> > I want to generate another column that consist of the first value in
> > each row from columns x1 to x3. That is
> >
> > NewColumn
> > .1
> > .2
> > .4
> >
> > Any input greatly appreciated,
> >
> > Thanks,
> >
> > Camilo
> >
> >
> > Camilo Mora, Ph.D.
> > Department of Geography, University of Hawaii
> >
> 
> ______________________________________________
> 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.



More information about the R-help mailing list