【问题标题】:R language Warning when concatenating using rbind使用 rbind 连接时的 R 语言警告
【发布时间】:2015-03-25 13:34:51
【问题描述】:

在 R 中,我将四个文件中每个具有相同变量名的 4 个数据文件连接起来:

ps <- rbind(ps1, ps2, ps3, ps4)

4 个文件中的每一个都包含使用read.xls() 函数正确读取的数据。但是,在rbind() 命令之后,我收到以下警告消息,并且rbind() 生成的文件中的一些数据不正确(通过设置为缺失),即使 4 个单独的数据文件中的数据是正确的。

Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = c(NA, NA, NA, NA, NA, NA, NA,  :
  invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = c(343L, 343L, NA, 343L, NA,  :
  invalid factor level, NA generated
3: In `[<-.factor`(`*tmp*`, ri, value = c(54L, 54L, 54L, 54L, 55L,  :
  invalid factor level, NA generated
4: In `[<-.factor`(`*tmp*`, ri, value = c(NA, NA, NA, NA, NA, NA, NA,  :
  invalid factor level, NA generated

我不知道这些消息的含义或如何解决我的问题。您的帮助将不胜感激。谢谢。

【问题讨论】:

  • 为什么?如果您的数据具有字符值并且您接受了 read.table 函数的默认设置,那么您将获得因子列,并且不同的数据框可能没有相同的值集。

标签: r concatenation rbind


【解决方案1】:

在你的 rbinding 之前试试这个:

pstmp <- lapply( list (ps1, ps2, ps3, ps4), 
                  function(df) as.data.frame( 
                        lapply(df, if (is.factor(cl)){ as.character(cl)
                                       } else {cl} ) ) )

然后:

ps <- do.call(rbind, pstmp) 

(交叉手指说我得到了正确的括号和括号。)或者按照 OldPro 的建议做。也可以使用options() 关闭自动因子构造。

【讨论】:

    【解决方案2】:

    可能最简单的解决方法是在读取XLS 文件时可以设置stringsAsFactors=FALSE

    发生的事情是某些列被转换为factor,但每个文件都有自己的factor,它们无法自动组合。

    进一步阅读:Loading Data From a FileFactors in R

    【讨论】:

    • 这行得通:可能最简单的解决方法是在读取 XLS 文件时,您可以设置 stringsAsFactors=FALSE THANKS!
    • @user2502904 不客气。如果您喜欢,请“接受”我的回答。您可以在此处阅读有关如何处理 StackOverflow(和其他 Stack Exchange 站点)上的答案的更多信息:stackoverflow.com/help/someone-answers
    猜你喜欢
    • 2019-12-12
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多