Как объявить эти CSV-данные R как числовые?

Я добавил пробелы вокруг полей в CSV-файле в плагине Vim csv.vim. Теперь у меня возникают трудности с объявлением классов столбцов как числовых ( num и т. Д.). Наличие отрицательных значений также вызывает проблемы в следующих столбцах Данные могут иметь пустые поля. Data data.csv

Test, test2, test3
    , 1    , 1
10.8, -1   , 1
1.1 , 2    , 2

Код

library('methods')
DF <- read.csv("/home/masi/Data/data.csv", header = T, sep = ",", colClasses=c('num','num'))

DF

Выход

Error in methods::as(data[[i]], colClasses[i]) : 
  no method or default for coercing “character” to “num”
Calls: read.csv -> read.table -> <Anonymous>
Execution halted
  • Преобразование в числовое значение не выполняется при выполнении colClasses = c ('num', 'num') .
  • Вывод в столбце 3 считается NA из-за одного знака минус ( -1 ) во втором столбце.

R: 3.3.3

0
07.05.2017, 18:27
2 ответа

AFAIK num не является допустимым атомным векторным классом в R:

Возможные значения: NA (по умолчанию , когда используется type.convert), "NULL" (когда столбец пропущен), один из классов атомарных векторов (логический, целочисленный, числовой, комплексный, символьный, необработанный) или "коэффициент", «Дата» или «POSIXct». В противном случае должен быть метод as (из методы пакета) для преобразования из «символа» в указанный формальный класс.

Ваш код должен работать, если вы замените его на числовой:

> DF <- read.csv("data.csv", header = T, sep = ",", colClasses=c('num','num'))Error in methods::as(data[[i]], colClasses[i]) : 
  no method or default for coercing “character” to “num”

, тогда как

> DF <- read.csv("data.csv", header = T, sep = ",", colClasses=c('numeric','numeric'))
> 
> DF
  Test test2 test3
1   NA     1     1
2 10.8    -1     1
3  1.1     2     2
> 
1
28.01.2020, 02:33

Попробуйте пакет readr с аргументом trim_ws=TRUE ] в read_delim():

R> readr::read_delim("data.csv", delim=",", col_types="dii", trim_ws=TRUE)
# A tibble: 3 × 3
   Test test2 test3
  <dbl> <int> <int>
1    NA     1     1
2  10.8    -1     1
3   1.1     2     2
1
28.01.2020, 02:33

Теги

Похожие вопросы