2010-08-24 2 views
12

у меня есть проблема, когда я импортировать CSV-файл с R:Чтение CSV с датами и номерами

Пример строки для импорта:

2010-07-27;91 
2010-07-26;93 
2010-07-23;88 

Я использую заявление:

data <- read.csv2(file="...", sep=";", dec=".", header=FALSE) 

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

Если я попытаюсь показать его как строку с использованием as.character, числовые данные также преобразуются в символы, поэтому они не пригодны для статистических процедур.

ответ

7

Добавить as.is=TRUE в контакт read.csv.

9

Возможно, вы хотите преобразовать значения символов в значащие значения времени. В этом случае объекты времени POSIXt являются хорошим выбором.

Учитывая ваш файл данных, я бы сделал что-то вроде этого.

data <- read.table(file="...", sep = ";", as.is = TRUE) 
data[,1] <- strptime(data[,1], "%Y-%m-%d") 

Посмотрите на strptime в помощь для получения более подробной информации.

ПРИМЕЧАНИЕ. Если вы укажете все свойства файла, просто используйте read.table. Единственной целью для всех других версий read.xxx является упрощение выражения, поскольку установлены значения по умолчанию. Здесь вы использовали read.csv2, потому что по умолчанию используется sep = ';'. Поэтому не указывайте его снова. Не нужно указывать, что это вся причина, по которой команда существует. Лично я использую только read.table, потому что я никогда не могу вспомнить имена/значения по умолчанию для всех вариантов. В вашем случае это также самый короткий вызов, потому что он удовлетворяет вашим заголовкам и деблокирует по умолчанию.

+1

, когда я запустить вторую линию, я получаю сообщение об ошибке вроде «предоставило 9 переменных для замены 1 переменных». Однако, когда я обертываю 'strptime' в' as.POSIXct (...) ', то есть' as.POSIXct (strptime (data [, 1], "% Y-% m-% d") 'кажется для работы. –

+0

Если данные [, 1] - это вектор символьных строк в формате c («2010-07-23», ...), что я написал. Что значит «похоже работать» в любом случае? например, вы просто конвертируете результат POSIXlt по умолчанию, и у вас есть еще одна функция, не упомянутая здесь, с использованием значения POSIXlt. Это нормально, это просто другой результат. Это не значит, что то, что там не работает, POSIXlt и POSIXct класса POSIXt (это тот, который я упомянул). – John

+1

Это именно то, что * 'read.csv (... colClasses ...)' * для! См. ответ Марека. Выполнение преобразования во время чтения с помощью colClasses лучше, чем этот ответ, потому что он не тратит много временной памяти. (Просто сделайте * 'gc (reset = TRUE)' * впоследствии.) Кроме того, это более читаемо. – smci

25

Используйте colClasses аргумент:

data <- read.csv2(file="...", sep=";", dec=".", header=FALSE, 
    colClasses=c("Date",NA)) 

NA означает "действовать по умолчанию"

После импорта вы можете конвертировать factor в Date по

data[[1]] <- as.Date(data[[1]]) 
Смежные вопросы