我有一系列CSV文件,其中数字使用逗号而不是小数点格式化为欧式样式,即0,5
而不是0.5
。如何用逗号作为小数点分隔符来读取数字?
在导入到R之前,有太多的这些文件需要编辑它们。我希望read.csv()
函数有一个简单的参数,或者一个方法应用于提取的数据集,以便R将数据视为一个数字而不是一个字符串。
我有一系列CSV文件,其中数字使用逗号而不是小数点格式化为欧式样式,即0,5
而不是0.5
。如何用逗号作为小数点分隔符来读取数字?
在导入到R之前,有太多的这些文件需要编辑它们。我希望read.csv()
函数有一个简单的参数,或者一个方法应用于提取的数据集,以便R将数据视为一个数字而不是一个字符串。
当您检查?read.table
时,您可能会找到所需的所有答案。
有两个问题与(大陆)欧洲CSV文件:
c
代表什么?对于标准的CSV,这是一个,
,欧洲CSV这是一个;
sep
是read.table
.
,欧洲CSV这是一个,
dec
是read.table
相应的参数来读取标准CSV使用read.csv
,阅读欧洲CSV使用read.csv2
。这两个函数只是设置适当参数的read.table
的包装。
如果您的文件不符合这些标准之一,请手动设置参数。
也许
as.is=T
这也防止了对字符列转换为因素
从?read.table
:
dec the character used in the file for decimal points.
是的,你可以利用它来进行read.csv
为好。 (对我说:没有愚蠢的,你不能!)
另外,您还可以使用
read.csv2
其中假定“”小数点分隔符和‘;’列分隔符。
谢谢! '结果< - read.csv2(file =“results.csv”,head = TRUE,sep =“;”,dec =“,”)'为我做了这项工作:) – Johan 2014-01-06 19:56:29
read.csv(... , sep=";")
假设该进口领域被称为“量”,就可以解决这样的类型,如果正在读你的号码为字符:
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
我有这样的事发生在我经常沿着当从excel或excel csv导入时遇到一些其他的小烦恼。由于看起来没有一致的方法来确保在导入到R时获得期望的结果,所以事后修复似乎是最好的方法。我的意思是,看看你输入的内容 - 确保它是你的预期,如果不是这样的话就修复它。
我喜欢用'setAs'解决方案,就像从[DWin](http://stackoverflow.com/questions/5068705/processing-negative-number-in-accounting-forma-in-r/5069649#5069649)和[ Greg Snow](http://stackoverflow.com/questions/1523126/how-to-read-a-csv-file-in-r-where-some-numbers-contain-commas/3611619#3611619) – Marek 2011-05-25 12:38:43
可以用作如下:
MYDATA < - 函数read.table(FILEIN,DEC = “”)
输入文件(FILEIN):
d:\ TEST>更多输入2 .TXT
2014年6月5日9点19分38秒0 3,182534
2014年6月5日九时19分51秒0 4,2311
如果您指出缺失值的表示方式(na.strings = ...),也可能解决问题。例如V1和V2在这里有相同的格式(小数在csv文件“”隔开),但由于来港存在于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
只需添加到布兰登的回答以上,这工作很适合我(我没有足够的代表评论):
如果您使用
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
不要忘记,你可能需要sub("[.]", "", d$amount, perl=T)
以绕过.
字符。
您应该提供一个虚拟数据。如果你的分隔符也是'',这可能会更复杂的问题。 =/ – aL3xa 2011-05-25 11:06:41
也许你可以尝试'read.csv2'? – Marek 2011-05-25 11:09:14
@Marek,没错,如果分隔符是';',但可以很容易地设置另一个分隔符字符串... – aL3xa 2011-05-25 11:11:42