The OP does not want a solution with the cbind() function even though I think it is the easier way to achieve the desired result. I will provide a code that can be copied and pasted and will also provide some comments to help explain what it does. Also, ajay_ohri gave a solution before me, which works but which, I believe could be tedious if the data frame has many columns. But again, it works!
# Create a hypothetical data frame with 20 rows and 10 columns whose column names are the first 10 letters of the alphabet
df <- as.data.frame(replicate(10, rnorm(20)))
dfnames <- letters[1:ncol(df)]
colnames(df) <- dfnames
# Here is the column we want to insert in the data frame
x <- 1:nrow(df)
# And we assume that we want to insert 'x' as the third column
index <- 3
# Let's create a loop that will shift each column from the current third column one step to the right
for(i in rev(index:ncol(df)) + 1) df[,i] <- df[,i-1]
mydf[,index] <- x
colnames(df) <- c(dfnames[1:(index-1)], "x", dfnames[ind:length(dfnames)])
Do not hesitate to post a reply to this message for improvements and/or questions.