简体   繁体   中英

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

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

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)

Maybe you want this:

R> A <- data.frame(a=c(1,2,3), b=c(3,6,2))
R> colnames(A) <- paste("Names", 1:ncol(A), sep="")
R> A
  Names1 Names2
1      1      3
2      2      6
3      3      2
R> 

but as Tyler said in the comment, it is not entirely clear what you are asking.

Still not entirely sure what you're trying to accomplish:

A = data.frame(a = c(1,2,3), b=c(3,6,2))
B <- data.frame(A, c(6, 3, 2), c(6, 3, 2))
names(B)[3:4] <- paste0("name", 1:2)
B

Which yields:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM