Как избежать факторов в R при чтении данных CSV - PullRequest
0 голосов
/ 10 мая 2019

У меня есть данные в CSV-файле. когда я его читаю, столбцы находятся в факторных уровнях, с помощью которых я не могу выполнить никаких вычислений.

Я использовал as.numeric(df$variablename), но он отображает совершенно другой набор данных для переменной.

original data in the variable: 2961,488,632,
   as.numeric output: 1,8,16

Ответы [ 2 ]

3 голосов
/ 10 мая 2019

При чтении данных с помощью read.table вы можете

  • укажите, как разделяются ваши данные sep =,
  • что такое десятичная точка dec =,
  • как NA символы выглядят как na.strings =
  • что вы не хотите преобразовывать строки в факторы stringsAsFactors = F

В вашем случае вы можете использовать что-то вроде:

read.table("mycsv.csv", header = T, sep = ",", dec = ".", stringsAsFactors = F,
            na.strings = c("", "-"))
2 голосов
/ 10 мая 2019

В дополнение к ответу Cettt, есть также colClasses.

Если вы заранее знаете, какие типы данных есть в столбцах вашего CSV-файла, вы можете указать это. Это мешает R «угадать», что такое тип данных, и дает вам знать, когда что-то не так, вместо того, чтобы решить, что это должна быть строка. например если в вашем CSV-файле с 4 столбцами есть столбцы Текст, Факторы, Целое, Числовое, вы можете использовать

read.table("mycsv.csv", header = T, sep = ",", dec = ".", 
    colClasses=c("character", "factor", "integer", "numeric"))

Отредактировано, чтобы добавить:

Как указал gersht, проблема, скорее всего, в нецифровке в столбце чисел. Зачастую это может быть способом кодирования значения NA. Указание colClasses заставляет R выдавать сообщение об ошибке, когда он встречает любые такие значения «не числовые или NA», так что вы можете легко увидеть проблему. Если это не код по умолчанию для NA, используйте аргумент na.strings = c("NA", "YOUR NA VALUE") Если это другая проблема, вам, вероятно, придется исправить файл перед импортом. Например:

read.table(sep=",", 
           colClasses=c("character", "numeric"), 
           text="
           cat,11
           canary,12
           dog,1O")  # NB not a 10; it's a 1 and a capital-oh.

дает

Ошибка сканирования (файл = файл, что = что, sep = sep, цитата = цитата, dec = dec,: scan () ожидал 'реального', получил '1O'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...