[R] find the "next non-NA" value within each row of a data-frame

Gabor Grothendieck ggrothendieck at gmail.com
Mon Apr 5 22:43:03 CEST 2010


Here is a slight simplification to the first line based on the fact
that na.locf works column by column:

mat <- t(na.locf(t(mydata), fromLast = TRUE, na.rm = FALSE))


On Mon, Apr 5, 2010 at 1:46 PM, Peter Ehlers <ehlers at ucalgary.ca> wrote:
> If I understand correctly what you want (according to your loop),
> you could use the na.locf function in pkg:zoo.
>
>  library(zoo)
>  mat <- t(apply(mydata, 1, na.locf, fromLast=TRUE, na.rm=FALSE))
>  dat <- as.data.frame(mat) ## since apply returns a matrix
>
>  -Peter Ehlers
>
> On 2010-04-05 10:52, Anna Stevenson wrote:
>>
>> #I wish to find the "next non-NA" value within each row of a data-frame.
>> #e.g. I have a data frame mydata. Rows 1, 2&  3 have soem NA values.
>>
>> mydata<- data.frame(matrix(seq(20*6), 20, 6))
>> mydata[1,3:5]<-  NA
>> mydata[2,2:3]<-  NA
>> mydata[2,5]<-  NA
>> mydata[3,6]<-  NA
>> mydata[1:3,]
>>
>> #this loop accomplishes the task; I am tryign toi learn a "better" way
>>
>> for(i in (ncol(mydata)-1):1 ){
>> mydata[,i]<- ifelse(is.na(mydata[,i])==TRUE,mydata[,i+1],mydata[,i])
>> }
>>
>> mydata[1:3,]
>> #Thank you. I appreciate the help.
>>
>>
>>
>>
>>        [[alternative HTML version deleted]]
>>
>>
>>
>>
>> ______________________________________________
>> 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.
>
> --
> Peter Ehlers
> University of Calgary
>
> ______________________________________________
> 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