Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

При проверке ?read.table вы, вероятно, найдете все необходимые ответы.

Есть две проблемы с (континентальными) европейскими CSV файлами:

  • Что означает c в csv? Для стандартного csv это ,, для европейского csv это ;
    sep - соответствующий аргумент в read.table
  • Каков символ десятичной точки? Для стандартного csv это ., для европейского csv это ,
    dec - соответствующий аргумент в read.table

Чтобы прочитать стандартное использование csv read.csv, прочитайте европейское использование csv read.csv2. Эти две функции являются только оболочками для read.table, которые устанавливают соответствующие аргументы.

Если ваш файл не соответствует ни одному из этих стандартов, установите аргументы вручную.

Ответ 2

От ?read.table:

dec     the character used in the file for decimal points.

И да, вы можете использовать это для read.csv. (мне: глупо, не можешь!)

В качестве альтернативы вы также можете использовать

read.csv2

который принимает "," десятичный разделитель и ";" для разделителей столбцов.

Ответ 3

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

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

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

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

Ответ 4

может быть

as.is=T

это также предотвращает преобразование столбцов символов в факторы

Ответ 5

можно использовать следующим образом:

mydata < - read.table(fileIn, dec = "," )

входной файл (fileIn):

D:\TEST > more input2.txt

06-05-2014 09:19:38 3,182534 0

06-05-2014 09:19:51 4,2311 0

Ответ 6

Проблемы также могут быть решены, если вы укажете, как представлены ваши недостающие значения (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

Ответ 7

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

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

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

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