Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Variable as a column name in data frame

Tags:

r

Is there any way to use string stored in variable as a column name in a new data frame? The expected result should be:

col.name <- 'col1' df <- data.frame(col.name=1:4) print(df)  # Real output   col.name 1        1 2        2 3        3 4        4  # Expected output   col1 1    1 2    2 3    3 4    4 

I'm aware that I can create data frame and then use names() to rename column or use df[, col.name] for existing object, but I'd like to know if there is any other solution which could be used during creating data frame.

like image 818
Adam H Avatar asked May 06 '15 16:05

Adam H


People also ask

How do you create a variable name for a column in Python?

If you want a variable x assigned to the columns Date and Name , you can subset the data frame with the using df[['col1','col2',...]] syntax. The outer brackets are the indexer operation of pandas data frame object, while the inner brackets create a list of desired column names.

How do you name columns in a DataFrame in R?

colnames () function can be used to change the column names of a data-frame column in R. colnames () function can be used for changing one column name at a time, also all the column names can be changed at once.

How do I get column names in a DataFrame?

To access a specific column in a dataframe by name, you use the $ operator in the form df$name where df is the name of the dataframe, and name is the name of the column you are interested in. This operation will then return the column you want as a vector.


2 Answers

You cannot pass a variable into the name of an argument like that.

Instead what you can do is:

df <- data.frame(placeholder_name = 1:4) names(df)[names(df) == "placeholder_name"] <- col.name 

or use the default name of "V1":

df <- data.frame(1:4) names(df)[names(df) == "V1"] <- col.name 

or assign by position:

df <- data.frame(1:4) names(df)[1] <- col.name 

or if you only have one column just replace the entire names attribute:

df <- data.frame(1:4) names(df) <- col.name 

There's also the set_names function in the magrittr package that you can use to do this last solution in one step:

library(magrittr) df <- set_names(data.frame(1:4), col.name) 

But set_names is just an alias for:

df <- `names<-`(data.frame(1:4), col.name) 

which is part of base R. Figuring out why this expression works and makes sense will be a good exercise.

like image 77
shadowtalker Avatar answered Sep 25 '22 04:09

shadowtalker


In addition to ssdecontrol's answer, there is a second option.

You're looking for mget. First assign the name to the variable, then the value to the variable that you have previously assigned. After that, mget will evaluate the string and pass it to data.frame.

assign(col.name, "col1") assign(paste(col.name), 1:4)  df <- data.frame(mget(col.name)) print(df)   col1 1    1 2    2 3    3 4    4 
like image 21
Chris C Avatar answered Sep 26 '22 04:09

Chris C