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

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

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

StringsAsFactors = FALSE应该解决这个问题,但我不确定如何去做。

一开始你可能会觉得处理字符没有那么大的压力,然后再慢慢地处理这些因素(它们可能会让你很沮丧)。首先,将所有因子列强制为

字符
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)

最新更新