Как читать числа с запятой в качестве десятичного разделителя?

У меня есть серия файлов CSV, в которых числа отформатированы в европейском стиле с использованием запятых вместо десятичных знаков, например 0,5 вместо из 0,5 .

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

28
задан Alan Moore 27 March 2016 в 02:37
поделиться

3 ответа

read.csv(... , sep=";")

Предположим, это импортированное поле называется «сумма», вы можете исправить тип таким образом, если ваши числа читаются как символы:

d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)

У меня такое часто случается со мной наряду с кучей других маленьких неприятностей при импорте из Excel или Excel CSV. Кажется, что нет единого способа обеспечить получение того, что вы ожидаете, когда вы импортируете в R, лучше всего использовать исправления пост-hoc. Под этим я подразумеваю ПОСМОТРЕТЬ то, что вы импортировали - убедитесь, что это то, что вы ожидали, и исправьте, если это не так.

3
ответ дан 28 November 2019 в 02:52
поделиться

Проблемы также могут быть решены, если вы укажете, как представлены ваши пропущенные значения (na.strings = ...). Например, здесь V1 и V2 имеют одинаковый формат (десятичные дроби, разделенные "," в CSV-файле), но поскольку NA присутствуют в V1, это интерпретируется как фактор:

dat <- read.csv2("...csv", header=TRUE)
head(dat)

> ID x    time    V1    V2
> 1  1   0:01:00 0,237 0.621
> 2  1   0:02:00 0,242 0.675
> 3  1   0:03:00 0,232 0.398


dat <- read.csv2("...csv", header=TRUE, na.strings="---")
head(dat)

> ID x    time    V1    V2
> 1  1   0:01:00 0.237 0.621
> 2  1   0:02:00 0.242 0.675
> 3  1   0:03:00 0.232 0.398
2
ответ дан 28 November 2019 в 02:52
поделиться

Просто добавлю к ответу Брэндона выше, который хорошо сработал для меня (у меня недостаточно представителя, чтобы комментировать):

Если вы используете

    d$amount <- sub(",",".",d$amount)
    d$amount <- as.numeric(d$amount)

don ' не забудьте, что вам может понадобиться sub("[.]", "", d$amount, perl=T), чтобы обойти персонажа ..

0
ответ дан 28 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

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