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

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

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

当你检查?read.table你可能会find你需要的所有答案。

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

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

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

如果您的文件不符合这些标准之一,请手动设置参数。

?read.table

 dec the character used in the file for decimal points. 

是的,你也可以使用read.csv 。 (对我来说:不笨,不可以!)使用read.csv2

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

假设这个导入的字段被称为“数量”,如果你的数字正在被读入字符,你可以用这种方法来修正types:

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

从excel或excel csv导入时,我经常遇到一些其他的小烦恼。 由于看起来没有一致的方法来确保在导入到R时获得期望的结果,所以事后修复似乎是最好的方法。 我的意思是,看看你input的内容 – 确保它是你所期望的,如果不是这样的话就修复它。

也许

 as.is=T 

这也防止将字符列转换成因素

可以使用如下:

mydata < – read.table(fileIn,dec =“,”)

input文件(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文件中用“,”分隔的小数),但是由于NAs存在于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 

只要在上面添加Brandon的答案,对我来说效果很好(我没有足够的代表评论):

如果你正在使用

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

不要忘了你可能需要sub("[.]", "", d$amount, perl=T)来解决这个问题. 字符。