Язык R Предупреждение при объединении с использованием rbind

В 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

Я понятия не имею, что означают эти сообщения и как решить мою проблему. Ваша помощь будет оценена по достоинству. Спасибо.


person user2502904    schedule 27.01.2015    source источник
comment
Почему? Если ваши данные имели символьные значения, и вы приняли настройки по умолчанию для функции read.table, то вы получили столбцы факторов, и разные кадры данных могли иметь разные наборы значений.   -  person IRTFM    schedule 27.01.2015


Ответы (2)


Вероятно, самое простое исправление заключается в том, что при чтении файлов XLS вы можете установить stringsAsFactors=FALSE.

Случилось так, что какой-то столбец был преобразован в factor, но каждый файл получил свой собственный factor, и они не могут автоматически объединяться.

Для дальнейшего чтения: Загрузка данных из файла, Факторы R

person Old Pro    schedule 27.01.2015
comment
Это сработало: вероятно, самое простое исправление заключается в том, что при чтении файлов XLS вы можете установить stringsAsFactors=FALSE THANKS! - person user2502904; 27.01.2015
comment
@ user2502904 Не за что. Пожалуйста, примите мой ответ, если он вам нравится. Вы можете узнать больше о том, как обрабатывать ответы на StackOverflow (и других сайтах Stack Exchange) здесь: stackoverflow.com/help/someone-answers< /а> - person Old Pro; 28.01.2015

Попробуйте это перед привязкой:

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().

person IRTFM    schedule 27.01.2015