无效因子级别,NA生成

时间:2015-09-27 00:48:49

标签: r vector dataframe append warnings

初学者。

我正在尝试向现有数据框追加一行。我创建了一个新的向量(下面),然后尝试将其绑定到原始数​​据框。收到一些警告信息。

#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,value =“Roberto”)中: 无效因子水平,NA生成

2:在[<-.factor*tmp*,ri,value =“Bolano”): 无效因子水平,NA生成

3:在[<-.factor*tmp*,ri,value =“2003-07-15”): 无效因子水平,NA生成

StringsAsFactors = FALSE应该解决这个问题,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:4)

一开始你可能不那么紧张地处理角色,然后在以后让自己陷入困境(他们可能非常令人沮丧)。首先,使用

将所有因子列强制转换为字符
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)