15

我正在尝试使用在循环中生成的名称将数据分配给现有数据框。一个基本的例子可能是

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))
}

现在我只需要弄清楚如何将 name1 和 name2 添加到 data.frame A,同时保留它们的指定名称。我敢肯定有一个简单的答案,我只是现在没有看到它。

最后我想结束

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

但我需要以自动化方式执行此操作。

例如,如果 for 循环可以调整为

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
}

但是,这不维护列名

4

3 回答 3

22

其他答案很好,但是如果您设置使用像您一样的循环,那么这将起作用:

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)
}

这使

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

或者,paste("Name", i, sep="")可以替换为paste0("Name", i)

于 2012-05-17T16:32:40.477 回答
3

也许你想要这个:

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> 

但正如泰勒在评论中所说,你在问什么并不完全清楚。

于 2012-05-16T18:12:24.133 回答
3

仍然不完全确定您要完成的工作:

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

产生:

  a b name1 name2
1 1 3     6     6
2 2 6     3     3
3 3 2     2     2
于 2012-05-16T18:21:32.887 回答