2015-09-27 67 views
1

初學者在這裏。無效因子水平,NA生成

我想追加一行到現有的數據框。我製作了一個新的矢量(下圖),然後嘗試將其綁定到原始數​​據框。收到一些警告消息。

#append new row 
new_row <- c(50, 22, "Roberto", "Bolano", "MALE", "2003-07-15") 

#bind to original data frame 
writers_df_large <- rbind(writers_df, new_row) 

警告消息: 1:在[<-.factor*tmp*,RI,值= 「羅伯特」): 無效因子水平,NA產生

2:[<-.factor*tmp*,RI,值=「博拉諾「): 無效因子水平,NA產生

3:在[<-.factor*tmp*,RI,值= 」2003-07-15「): 無效因子水平,NA產生

StringsAsFactors = FALSE應該解決這個問題,但我不知道該怎麼做。

+0

另一種方式添加新行,是你的載體轉換爲data.frame,爲其分配相同的名稱爲您的數據,然後rbind會的工作,隨着因素水平的擴大。 – user20650

回答

3

你最初可能不會很擔心與角色一起工作,然後在稍後讓自己陷入因素(他們可能會非常沮喪)。因此,首先,迫使所有的因素列字符與

writers_df_large[] <- lapply(writers_df_large, function(x) { 
    if(is.factor(x)) as.character(x) else x 
}) 

v <- vapply(writers_df_large, is.factor, NA) 
writers_df_large[v] <- lapply(writers_df_large[v], as.character) 

其次,使用列表新行因爲c()你會強迫所有的值字符。

new_row <- list(50, 22, "Roberto", "Bolano", "MALE", "2003-07-15") 

現在你可以用rbind()

rbind(writers_df_large, new_row)