2017-10-15 25 views
0

問題分配值單列在新列

我想追加新的數據列到現有的數據幀。數據幀是多行和多列的常量,我試圖追加的數據只有一行,它應該被添加到現有數據框的第一行。

data是一個有3000行和20列的數據幀,而a是一個有1行和12列的數據幀。

for (o in 1:length(a)) { 
    data[[1,(paste0(names(a)[o]))]]=a[o] 
} 

錯誤

在不存在柱

預期結果替換元件

我想獲得一個數據幀有3000行和32列,最後12列缺少ot的值她的行,我打算一個接一個地填寫。

我已經嘗試...

append()cbind()merge()沒有成功,所以我想出了這個循環,但要麼沒有成功。我無法弄清楚我犯了什麼錯誤。

+0

歡迎來到StackOverflow!請閱讀關於[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)以及如何給出[可重現的示例](http:// stackoverflow。COM /問題/ 5963269 /如何對化妝一個偉大-R-重複性,例如/ 5963610)。這會讓其他人更容易幫助你。 – Jaap

回答

0

也許最好的方法是創建一個新的dataframe有相同數量的行爲data,第一行爲a,其他行丟失:

a_to_append <- rbind(a, matrix(NA, ncol = 12, nrow = 2999, dimnames = list(NULL, colnames(a)))) 

然後,簡單地結合兩個數據幀:

data_all <- cbind(data, a_to_append) 

> head(data_all) 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
0

的乾淨的解決方案,我發現:

生成2數據幀:

df1 <- data.frame(x=c(1,2,3,4,5),y=c("a","b","c","d","e")) 
df2 <- data.frame(z="added1",w="added2") 

我們需要d2的列添加到d1和反之亦然。

df1.names <- names(df1) 
df1[,names(df2)] <- NA 
df2[,df1.names] <- NA 

由於df1不具有names(df2)列,第一條指令創建列,並指定他的所有值NAdf2相同。

最後,我們可以綁定兩個數據幀:

df1 <- rbind(df2,df1) 

     z  w x y 
1 added1 added2 NA <NA> 
2 <NA> <NA> 1 a 
3 <NA> <NA> 2 b 
4 <NA> <NA> 3 c 
5 <NA> <NA> 4 d 
6 <NA> <NA> 5 e 

你的情況:

data.names <- names(data) 
data[,names(a)] <- NA 
a[,data.names] <- NA 

data <- rbind(data,a)