2015-01-27 8 views
1

В R, я конкатенации 4 файлов данных с одинаковыми именами переменных в каждом из четырех файлов с:R язык Предупреждение при конкатенации с помощью rbind

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 

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

+0

Почему? Если у ваших данных были знаковые значения, и вы приняли настройки по умолчанию для функции read.table, то у вас есть столбцы факторов, и у разных фреймов данных может не быть одинакового набора значений. –

ответ

2

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

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

Для дальнейшего чтения: Loading Data From a File, Factors in R

+0

Это сработало: Вероятно, самым простым решением является то, что при чтении файлов XLS вы можете установить строкиAsFactors = FALSE THANKS! – user2502904

+0

@ user2502904 Добро пожаловать. Пожалуйста, «примите» мой ответ, если вам это нравится. Вы можете узнать больше о том, как обрабатывать ответы на StackOverflow (и других сайтах Stack Exchange) здесь: http://stackoverflow.com/help/someone-answers –

0

Попробуйте это перед вашим 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().

 Смежные вопросы

  • Нет связанных вопросов^_^