Hi, May be you can try ?cut
dat <- read.table(text="INCOME 20100 26800 55050 82000",sep="",header=TRUE) dat <- transform(dat, INCOME_RANGE=as.character(cut(INCOME,breaks=seq(0,1e5, by=25e3),labels=c("below 25000", "25000-49999", "50000-74999","75000-99999")))) dat # INCOME INCOME_RANGE #1 20100 below 25000 #2 26800 25000-49999 #3 55050 50000-74999 #4 82000 75000-99999 BTW, the range in your loop code is different than the one you showed in the example. A.K. Hi All, I have a column called "Income". Currently I have values as below INCOME 20100 26800 55050 82000 I need to change this buy assigning Bucket Ranges. My output should be as below. INCOME below 25000 25000 - 49999 50000 - 75000 75000 - 100000 I wrote a code as below. Where it is not giving the correct answer. for(j in 1:nrow(tablename)) { if (tablename_INCOME[j] >=0 & tablename_INCOME[j] < 25000){ tablename_INCOME[j] <- 'below 25000' }else{ if (tablename_INCOME[j] >= 25000 & tablename_INCOME[j] < 50000){ tablename_INCOME[j] <- '25,000-49,999.99' }else{ if (tablename_INCOME[j] >= 50000 & tablename_INCOME[j] < 100000){ tablename_INCOME[j] <- '50,000-99,999.99' }else{ if (tablename_INCOME[j] >= 100000 & tablename_INCOME[j] < 150000){ tablename_INCOME[j] <- '1,00,000-1,49,999.99' }else{ if (tablename_INCOME[j] >= 100000 & tablename_INCOME[j] < 150000){ tablename_INCOME[j] <- '1,50,000-1,79,999.99' }else{ if (tablename_INCOME[j] >= 180000){ tablename_INCOME[j] <- 'above 1,80,000' Can anyone help me with this ? Regards, Praveen ______________________________________________ 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.