2015-09-27 65 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)