
This would work:
X <- lapply(1:nrow(dat1), function(i) rev(dat1[i, -c(1:2)]))sapply(X, function(x) x[!is.na(x)][1])


> Date: Tue, 24 Jul 2012 23:56:17 -0300
> From: cmora@dal.ca
> To: smartpink111@yahoo.com
> CC: r-help@r-project.org; henrik.singmann@psychologie.uni-freiburg.de
> Subject: Re: [R] First value in a row
> 
> Hi Henrik and Arun,
> 
> I now understand the script you provided. Very smart solution I think.  
> I wonder, however, if there is an alternative way as to count the last  
> number in a row?.
> For instance, considering the following dataframe
> 
> dat1<-read.table(text="
> Lat  Lon  x1  x2  x3
> 01    12  .4  .5  .6
> 01    12  .2  .3  NA
> 01    11  .1  NA  NA
> 01    10  NA  NA  NA
> ",sep="",header=TRUE)
> 
> the last value (from left to right) should be:
> .6
> .3
> .1
> NA
> 
> NAs are always consecutive once they appear.
> 
> Thanks again,
> 
> Camilo
> 
> 
> Camilo Mora, Ph.D.
> Department of Geography, University of Hawaii
> Currently available in Colombia
> Phone:   Country code: 57
>           Provider code: 313
>           Phone 776 2282
>           From the USA or Canada you have to dial 011 57 313 776 2282
> http://www.soc.hawaii.edu/mora/
> 
> 
> 
> Quoting arun <smartpink111@yahoo.com>:
> 
> > Hi Henrik,
> >
> > Thanks for testing it to a different dataset.  I didn't test it at  
> > that time to multiple conditions.  Probably, apply is a better method.
> >
> >
> > Anyway, you can still get the same result by doing this:
> >
> > dat1<-read.table(text="
> > Lat  Lon  x1  x2  x3
> > 01    10  NA  NA  .1
> > 01    11  .4  NA  .3
> > 01    12  NA  .5  .6
> > ",sep="",header=TRUE)
> > dat2<-data.frame(t(dat1[,3:5]))
> > dat3<-data.frame(dat1,NewColumn=unlist(lapply(dat2,function(x)  
> > x[!is.na(x)][1])))
> >  row.names(dat3)<-1:nrow(dat3)
> >  dat3
> > #  Lat Lon  x1  x2  x3 NewColumn
> > #1   1  10  NA  NA 0.1       0.1
> > #2   1  11 0.4  NA 0.3       0.4
> > #3   1  12  NA 0.5 0.6       0.5
> >
> > #Now, to a slightly different dataset
> > dat1<-read.table(text="
> > Lat  Lon  x1  x2  x3
> > 01    10  NA  NA  NA
> > 01    11  NA  NA  .3
> > 01    12  NA  .6   NA
> > ",sep="",header=TRUE)
> >  dat2<-data.frame(t(dat1[,3:5]))
> >  dat3<-data.frame(dat1,NewColumn=unlist(lapply(dat2,function(x)  
> > x[!is.na(x)][1])))
> >   row.names(dat3)<-1:nrow(dat3)
> >   dat3
> >   #Lat Lon x1  x2  x3 NewColumn
> > #1   1  10 NA  NA  NA        NA
> > #2   1  11 NA  NA 0.3       0.3
> > #3   1  12 NA 0.6  NA       0.6
> >
> >
> > I hope this works well.
> >
> >
> > A.K.
> >
> >
> >
> >
> > ----- Original Message -----
> > From: Henrik Singmann <henrik.singmann@psychologie.uni-freiburg.de>
> > To: arun <smartpink111@yahoo.com>
> > Cc: Camilo Mora <cmora@dal.ca>; R help <r-help@r-project.org>
> > Sent: Tuesday, July 24, 2012 10:18 AM
> > Subject: Re: First value in a row
> >
> > Hi,
> >
> > As Arun's idea was also my first idea let me pinpoint the problem of  
> > this solution.
> > It only works if the data in question (i.e., columns x1 to x3)  
> > follow the pattern of the example data insofar that the NAs form a  
> > triangle like structure. This is so because it loops over columns  
> > instead of rows and takes advantage of the triangle NA structure.
> >
> > For example, slightly changing the data leads to a result that does  
> > not follow the description of Camilo seem to want:
> >
> > dat1<-read.table(text="
> > Lat  Lon  x1  x2  x3
> > 01    10  NA  NA  .1
> > 01    11  .4  NA  .3
> > 01    12  NA  .5  .6
> > ",sep="",header=TRUE)
> >
> > # correct answer from description would be .1, .4, .5
> >
> > # arun's solution:
> > data.frame(dat1,NewColumn=rev(unlist(lapply(dat1[,3:5],function(x)  
> > x[!is.na(x)][1]))))
> >
> > #  x3  x2  x1
> > # 0.1 0.5 0.4
> >
> > # my solution:
> > apply(dat1[,-(1:2)], 1, function(x) x[!is.na(x)][1])
> >
> > # [1] 0.1 0.4 0.5
> >
> > So the question is, what you want and how the data looks.
> >
> > Cheers,
> > Henrik
> >
> >
> > Am 24.07.2012 14:27, schrieb arun:
> >> Hi,
> >>
> >> Try this:
> >>
> >> dat1<-read.table(text="
> >> Lat  Lon  x1  x2  x3
> >> 01    10  NA  NA  .1
> >> 01    11  NA  .2  .3
> >> 01    12  .4  .5  .6
> >> ",sep="",header=TRUE)
> >>
> >> dat2<-dat1[,3:5]
> >>     
> >> dat3<-data.frame(dat1,NewColumn=rev(unlist(lapply(dat2,function(x)  
> >> x[!is.na(x)][1]))))
> >> row.names(dat3)<-1:nrow(dat3)
> >>    dat3
> >>     Lat Lon  x1  x2  x3 NewColumn
> >> 1   1  10  NA  NA 0.1       0.1
> >> 2   1  11  NA 0.2 0.3       0.2
> >> 3   1  12 0.4 0.5 0.6       0.4
> >>
> >> A.K.
> >>
> >>
> >>
> >>
> >> ----- Original Message -----
> >> From: Camilo Mora <cmora@dal.ca>
> >> To: r-help@r-project.org
> >> Cc:
> >> Sent: Tuesday, July 24, 2012 2:48 AM
> >> Subject: [R] First value in a row
> >>
> >> 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@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.
> >>
> >>
> >
> > --
> > Dipl. Psych. Henrik Singmann
> > PhD Student
> > Albert-Ludwigs-Universität Freiburg, Germany
> > http://www.psychologie.uni-freiburg.de/Members/singmann
> >
> >
> >
> 
> ______________________________________________
> 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]]

