Assign a column of a data.frame with string name in R

mmann1123 picture mmann1123 · May 16, 2012 · Viewed 25.7k times · Source

I am trying to assign data to an existing dataframe with a name generated in a loop. A basic example might be

A = data.frame(a = c(1,2,3), b=c(3,6,2))

for (i in 1:2){
    name = paste("Name",i, sep="")
    assign(name, c(6,3,2))
}

Now I just need to figure out how to add name1 and name2 to the data.frame A, while keeping their assigned name. I'm sure there is an easy answer, I'm just not seeing it right now.

in the end I would like to end up with

A
#a b name1 name2
#1 3 6      6
#2 6 3      3
#3 2 2      2

But I need to do this in an automated fashion.

For instance if the for loop could be adapted to be like

for (i in 1:2){
    name = paste("Name",i, sep="")
    assign(name, c(6,3,2)
    A= cbind(A, get(paste(name,i,sep="")))  # works but doesn't maintain the column name as name1 or name2 etc
}

this however doesn't maintain column names

Answer

Brian Diggs picture Brian Diggs · May 17, 2012

The other answers are good, but if you are set on using a loop like you have, then this would work:

A <- data.frame(a = c(1,2,3), b = c(3,6,2))

for (i in 1:2){
    A[paste("Name", i, sep="")] <- c(6,3,2)
}

which gives

> A
  a b Name1 Name2
1 1 3     6     6
2 2 6     3     3
3 3 2     2     2

Alternatively, paste("Name", i, sep="") could be replaced with paste0("Name", i)