Advertisement
Advertisement


How to rename a single column in a data.frame?


Question

I know if I have a data frame with more than 1 column, I can use

colnames(x) <- c("col1","col2")

to rename the columns. How do I do this if it's just one column? Meaning a vector or data frame with only one column in it.

Example:

trSamp <- data.frame(sample(trainer$index, 10000))
head(trSamp )
#   sample.trainer.index..10000.
# 1                      5907862
# 2                      2181266
# 3                      7368504
# 4                      1949790
# 5                      3475174
# 6                      6062879

ncol(trSamp)
# [1] 1
class(trSamp)
# [1] "data.frame"
class(trSamp[1])
# [1] "data.frame"
class(trSamp[,1])
# [1] "numeric"
colnames(trSamp)[2] <- "newname2"
# Error in names(x) <- value : 
#   'names' attribute [2] must be the same length as the vector [1]
2017/01/31
1
340
1/31/2017 10:12:59 PM

Accepted Answer

colnames(trSamp)[2] <- "newname2"

attempts to set the second column's name. Your object only has one column, so the command throws an error. This should be sufficient:

colnames(trSamp) <- "newname2"
2011/09/23
353
9/23/2011 5:01:46 PM


colnames(df)[colnames(df) == 'oldName'] <- 'newName'
2014/05/05

This is an old question, but it is worth noting that you can now use setnames from the data.table package.

library(data.table)

setnames(DF, "oldName", "newName")

# or since the data.frame in question is just one column: 
setnames(DF, "newName")

# And for reference's sake, in general (more than once column)
nms <- c("col1.name", "col2.name", etc...)
setnames(DF, nms)
2013/10/03

This can also be done using Hadley's plyr package, and the rename function.

library(plyr) 
df <- data.frame(foo=rnorm(1000)) 
df <- rename(df,c('foo'='samples'))

You can rename by the name (without knowing the position) and perform multiple renames at once. After doing a merge, for example, you might end up with:

  letterid id.x id.y
1       70    2    1
2      116    6    5
3      116    6    4
4      116    6    3
5      766   14    9
6      766   14   13

Which you can then rename in one step using:

letters <- rename(letters,c("id.x" = "source", "id.y" = "target"))

  letterid source target
1       70      2      1
2      116      6      5
3      116      6      4
4      116      6      3
5      766     14      9
6      766     14     13
2013/08/26

I think the best way of renaming columns is by using the dplyr package like this:

require(dplyr)
df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...)

It works the same for renaming one or many columns in any dataset.

2017/07/23

I like the next style for rename dataframe column names one by one.

colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname'

where

which(colnames(df) == 'old_colname')

returns by the index of the specific column.

2014/01/08

Source: https://stackoverflow.com/questions/7531868
Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Email: [email protected]