Hi, Not sure if you have only one "country" or not.
Try this: dat<- data.frame(val,state,country,stringsAsFactors=FALSE) dat$country[dat$country==0]<-dat$country[1] #or #dat$country[dat$country==0]<- dat$country[dat$country!=0] res<-do.call(rbind,lapply(split(dat,cumsum(grepl("[A-Za-z]",dat$state))),function(x) {x$state[x$state==0]<- x$state[1];x})) #or #res<- do.call(rbind,lapply(split(dat,cumsum(grepl("[A-Za-z]",dat$state))),function(x) {x$state[x$state==0]<- x$state[x$state!=0];x})) row.names(res)<- 1:nrow(res) res # val state country #1 1.50643668 TN India #2 -0.88024059 TN India #3 0.35025608 TN India #4 -0.08874850 AP India #5 -1.69222182 AP India #6 0.09479274 AP India A.K. Respected Sir/Madam The dataset I have, given below. set.seed <- (1) val <- rnorm(6) state <- c("TN",0,0,"AP",0,0) country <- c("India",0,0,0,0,0) dat <- as.data.frame(cbind(val,state,country)) The dataset I need is given state1 <- c("TN","TN","TN","AP","AP","AP") country1 <- c("India","India","India","India","India","India") dat1 <- as.data.frame(cbind(val,state1,country1)) Please help me or direct me to fill the zeros with the appropriate character values. Thanking you in advance ______________________________________________ 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.