我正在尝试将数据分配给现有数据框,并在循环中生成名称。一个基本的例子可能是
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
}
然而,这不保留列名
答案 0 :(得分:19)
其他答案都很好,但是如果你像你一样使用循环,那么这将有效:
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)
答案 1 :(得分: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>
但正如泰勒在评论中所说,你所要求的并不完全清楚。
答案 2 :(得分: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