2012-05-16 31 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 
相關問題