繁体   English   中英

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

[英]How to read in numbers with a comma as decimal separator?

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

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

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

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

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

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

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

?read.table

dec     the character used in the file for decimal points.

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

或者,您也可以使用

read.csv2

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

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

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

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

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

可以如下使用:

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

如果您指出缺失值的表示方式(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

也许

as.is=T

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

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

如果你正在使用

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM