2012-05-16 28 views
13

我正在尝试使用循环中生成的名称为现有数据框分配数据。一个基本的例子可能是在R中分配一个包含字符串名称的data.frame的列

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

现在我只需要弄清楚如何NAME 1和NAME添加到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

这是非常令人困惑的你问什么来代替。你能发布你期望输出的样子吗? –

回答

18

其他的答案是好的,但如果你是在使用一个循环像你这样的设置有,那么这会工作:

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)

+0

这有很大的帮助。是。在for循环之前'A'不能为空。 –

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> 

但泰勒在评论中说,这是不完全清楚你在问什么。

+0

感谢您的回复我只是澄清了我在找什么。 – mmann1123

+0

只需在开头指定四列,然后指定何时/如何/如何使用它们的名称。我的答案已经向你展示了'colnames(A)',你也可以分配给'colnames(A)[3:4]'或任何其他有效的表达式。 –

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 
相关问题