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

R 如何以逗号作为小数点分隔符读入数字?,r,csv,number-formatting,R,Csv,Number Formatting,我有一系列CSV文件,其中数字的格式为欧式,使用逗号而不是小数点,即0,5而不是0.5 在导入到R之前,这些文件太多,无法对其进行编辑。我希望有一个简单的参数用于read.csv()函数,或者有一个方法应用于提取的数据集,以便R将数据视为数字而不是字符串。 as.is=T 这也会阻止将字符列从?read转换为因数。table: dec the character used in the file for decimal points. 是的,您也可以将其用于read.csv。(对我来

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

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

as.is=T

这也会阻止将字符列从
?read转换为因数。table

dec     the character used in the file for decimal points.
是的,您也可以将其用于
read.csv
。(对我来说:不愚蠢,你不能!)

或者,您也可以使用

read.csv2

它假定列分隔符为“,”小数分隔符和“;”

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

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

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

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

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

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

    read.csv(... , sep=";")
    
    假设此导入字段名为“金额”,如果您的数字作为字符读入,则可以通过这种方式修复类型:

    d$amount <- sub(",",".",d$amount)
    d$amount <- as.numeric(d$amount)
    
    d$amount可按如下方式使用:

    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
    
    mydata更多输入2.txt
    06-05-2014 09:19:38     3,182534        0
    06-05-2014 09:19:51     4,2311          0
    
    如果您指明缺失值的表示方式(na.strings=…),问题也可能得到解决。例如,此处的V1和V2具有相同的格式(在csv文件中以“,”分隔的小数),但由于V1中存在NAs,因此将其解释为因子:

    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
    
    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
    数据ID x时间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
    
    我想补充一下布兰登的回答,这对我来说很有效(我没有足够的代表发表评论):

    如果你正在使用

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

    d$amount您应该提供一个虚拟数据。如果您的分隔符也是
    ,则这可能是更复杂的问题=/也许你可以尝试使用
    read.csv2
    ?@Marek,没错,如果分隔符是
    ,但可以轻松设置另一个分隔符字符串…我喜欢使用
    setAs
    的解决方案,就像来自和感谢的答案一样<代码>结果没有“欧洲csv”这样的东西。你可以参考德语/法语,。。。数字表示法。但是,没有单一/简单的欧洲csv:)您能说明如何在逗号用作小数分隔符和字段分隔符的行中读取数据吗?字段值由双引号分隔。我提出这个问题。