如何读取以逗号作为小数点分隔符的数字?

问题描述 投票:0回答:8

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

0,5
而不是
0.5

这些文件太多,无法在导入到 R 之前对其进行编辑。我希望

read.csv()
函数有一个简单的参数,或者一种应用于提取的数据集的方法,以便 R 将数据视为数字而不是字符串。

r csv number-formatting
8个回答
54
投票

当您检查

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

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

  1. csv中的
    c
    代表什么?对于标准 csv,这是一个
    ,
    ,对于欧洲 csv,这是一个
    ;

    sep
    read.table
  2. 中对应的参数
  3. 小数点的字符是什么?对于标准 csv,这是一个
    .
    ,对于欧洲 csv,这是一个
    ,

    dec
    read.table
  4. 中对应的参数

要读取标准 csv,请使用

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

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


13
投票

来自

?read.table

dec     the character used in the file for decimal points.

是的,您也可以将其用于

read.csv
。 (对我来说:不傻,你不能!)

或者,您也可以使用

read.csv2

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


4
投票
read.csv(... , sep=";")

假设这个导入的字段名为“金额”,如果您的数字被作为字符读取,您可以通过这种方式修复类型:

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

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


3
投票

可以使用如下:

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

input file (fileIn):

D:\TEST>more  input2.txt

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

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

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

1
投票

也许

as.is=T

这也阻止了将字符列转换为因子


1
投票

您可以将小数字符作为参数传递(

dec = ","
):

# Semicolon as separator and comma as decimal point by default
read.csv2(file, header = TRUE, sep = ";", quote = "\"", dec = ",",
          fill = TRUE, comment.char = "", encoding = "unknown", ...)

更多信息https://r-coder.com/read-csv-r/


0
投票

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

如果您正在使用

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

不要忘记,您可能需要

sub("[.]", "", d$amount, perl=T)
来绕过
.
角色。

© www.soinside.com 2019 - 2024. All rights reserved.