如何用逗号作为小数分隔符读取数字?

时间:2011-05-25 10:58:58

标签: r csv number-formatting

我有一系列CSV文件,其中数字使用逗号而非小数点格式化为欧洲风格,即0,5而不是0.5

在导入到R之前,有太多这些文件要编辑它们。我希望read.csv()函数有一个简单的参数,或者一个方法应用于提取的数据集以便R处理数据为数字而不是字符串。

7 个答案:

答案 0 :(得分:38)

当您检查?read.table时,您可能会找到所需的所有答案。

(大陆)欧洲csv文件存在两个问题:

  1. csv中的c代表什么?对于标准csv,这是,,对于欧洲csv,这是;
    sepread.table
  2. 中的相应参数
  3. 小数点的字符是什么?对于标准csv,这是.,对于欧洲csv,这是,
    decread.table
  4. 中的相应参数

    要阅读标准csv使用read.csv,请阅读欧洲csv使用read.csv2。这两个函数只是设置适当参数的read.table的包装器。

    如果您的文件不遵循这些标准中的任何一个,请手动设置参数。

答案 1 :(得分:12)

来自?read.table

dec     the character used in the file for decimal points.

是的,您也可以将其用于read.csv。 (对我来说:没有傻,你做不到!)

或者,您也可以使用

read.csv2

假设一个“,”小数分隔符和一个“;”用于列分隔符。

答案 2 :(得分:3)

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

假设此导入的字段名为“amount”,如果您的数字以字符形式读入,则可以通过这种方式修复类型:

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

从excel或excel csv导入时,我经常遇到这种情况以及其他一些小麻烦。由于似乎没有一致的方法来确保在导入R时获得预期,因此事后修复似乎是最好的方法。我的意思是,看看你导入的东西 - 确保它是你所期望的,如果不是,那就修好它。

答案 3 :(得分:2)

如果您指明缺失值的表示方式(na.strings = ...),也可以解决问题。例如,V1和V2在这里具有相同的格式(在csv文件中以“,”分隔的小数),但由于在V1中存在NA,因此它被解释为因子:

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

答案 4 :(得分:1)

也许

as.is=T

这也可以防止将字符列转换为因子

答案 5 :(得分:1)

可以使用如下:

mydata&lt; - read.table(fileIn,dec =&#34;,&#34;)

输入文件(fileIn):

D:\ TEST&gt; more input2.txt

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

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

答案 6 :(得分:0)

只是为了补充布兰登的上述答案,这对我来说效果很好(我没有足够的代表发表评论):

如果您正在使用

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

不要忘记您可能需要sub("[.]", "", d$amount, perl=T)来绕过.字符。