How can I add a column to an R data.frame as a new first column so that all other columns are shifted by one column?
Like:
a|b|c --> new|a|b|c
I need to do this because I want the row.names to become a discrete column. This is needed because the write.arff function takes a data.frame as input but does not preserve the names when writing files.
This has been answered in the comments, but to make it clearer that there is an answer, here's a small example:
First, some sample data:
(df <- data.frame(A = 1:2, B = 3:4, row.names = c("row1", "row2")))
# A B
# row1 1 3
# row2 2 4
The suggestion from the comments. Note that the original row.names is still part of the data.
cbind(rn = rownames(df), df)
# rn A B
# row1 row1 1 3
# row2 row2 2 4
You can get rid of that by setting row.names = NULL in the cbind step. Since you are cbinding data.frames, you could also pass other arguments to data.frame if necessary (such as stringsAsFactors = FALSE if you didn't want the "rn" column to be a factor).
cbind(rn = rownames(df), df, row.names = NULL)
# rn A B
# 1 row1 1 3
# 2 row2 2 4
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With