Числовые переменные, преобразованные в факторы при чтении CSV файла

Я пытаюсь прочитать созданный Excel CSV файл в R, где все векторы (столбцы в файле CSV) являются числовыми. Тем не менее, они преобразуются в коэффициент каждый раз, когда я их импортирую.

Вот пример того, как выглядит мой CSV:

enter image description here

Это мой код:

options(StringsAsFactors=F)
data<-read.csv("in.csv",dec=",",sep=";")

Как вы можете видеть, я позабочусь о том, чтобы установить de dec на "," и "sep" на ";". Однако все векторы, которые должны быть числами, являются факторами!

Может кто-нибудь дать мне совет? Спасибо!

Ответы

Ответ 1

Строки NA в файле csv, N/A интерпретируются как character, а затем весь столбец преобразуется в character. Если у вас stringsAsFactors = TRUE в options или в read.csv (по умолчанию), столбец далее преобразуется в factor. Вы можете использовать аргумент na.strings, чтобы сообщить read.csv, какие строки следует интерпретировать как NA.

Небольшой пример:

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";")
str(df)

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";", na.strings = "N/A")
str(df)

Обновить следующий комментарий

Хотя это не очевидно из предоставленных выборочных данных, существует также проблема с примерами "$", сцепленными с числами, например. '$ 3,3'. Такие значения будут интерпретироваться как character, а затем dec = "," нам не поможет. Нам нужно заменить как '$', так и ',', прежде чем переменная будет преобразована в числовую.

df <- read.csv(text = "x;y;z
               N/A;1,1;2,2$
               $3,3;5,5;4,4", dec = ",", sep = ";", na.strings = "N/A")
df
str(df)

df[] <- lapply(df, function(x){
  x2 <- gsub(pattern = "$", replacement = "", x = x, fixed = TRUE)
  x3 <- gsub(pattern = ",", replacement = ".", x = x2, fixed = TRUE)
  as.numeric(x3)
  }
                         )
df
str(df)

Ответ 2

Вы могли бы заставить свой исходный код работать на самом деле - там крошечная опечатка ( "stringsAsFactors", а не "StringsAsFactors" ). Команда options не жалуется на неправильный текст, но это просто не работает. Когда все будет сделано правильно, оно будет считаться как char вместо факторов. Затем вы можете преобразовать столбцы в любой формат.

Ответ 3

У меня была такая же проблема, и я испробовал все исправления в этом и других дублированных сообщениях. Никто действительно не работал так хорошо. То, как я исправлял это, было на самом деле превосходным. Если вы выделите все столбцы в исходном файле (в excel), щелкните правой кнопкой мыши == > ячейки формата, а затем выберите "номер", он будет импортировать отлично (пока у вас нет нечисловых символов под заголовком)