我有一系列CSV文件,其中数字使用逗号而非小数点格式化为欧洲风格,即0,5
而不是0.5
。
在导入到R之前,有太多这些文件要编辑它们。我希望read.csv()
函数有一个简单的参数,或者一个方法应用于提取的数据集以便R处理数据为数字而不是字符串。
答案 0 :(得分:38)
当您检查?read.table
时,您可能会找到所需的所有答案。
(大陆)欧洲csv文件存在两个问题:
c
代表什么?对于标准csv,这是,
,对于欧洲csv,这是;
sep
是read.table
.
,对于欧洲csv,这是,
dec
是read.table
要阅读标准csv使用read.csv
,请阅读欧洲csv使用read.csv2
。这两个函数只是设置适当参数的read.table
的包装器。
如果您的文件不遵循这些标准中的任何一个,请手动设置参数。
答案 1 :(得分:12)
来自?read.table
:
dec the character used in the file for decimal points.
是的,您也可以将其用于read.csv
。 (对我来说:没有傻,你做不到!)
或者,您也可以使用
read.csv2
假设一个“,”小数分隔符和一个“;”用于列分隔符。
答案 2 :(得分:3)
read.csv(... , sep=";")
假设此导入的字段名为“amount”,如果您的数字以字符形式读入,则可以通过这种方式修复类型:
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
从excel或excel csv导入时,我经常遇到这种情况以及其他一些小麻烦。由于似乎没有一致的方法来确保在导入R时获得预期,因此事后修复似乎是最好的方法。我的意思是,看看你导入的东西 - 确保它是你所期望的,如果不是,那就修好它。
答案 3 :(得分: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
答案 4 :(得分:1)
也许
as.is=T
这也可以防止将字符列转换为因子
答案 5 :(得分:1)
可以使用如下:
mydata&lt; - read.table(fileIn,dec =&#34;,&#34;)
输入文件(fileIn):
D:\ TEST&gt; more input2.txt
06-05-2014 09:19:38 3,182534 0
06-05-2014 09:19:51 4,2311 0
答案 6 :(得分:0)
只是为了补充布兰登的上述答案,这对我来说效果很好(我没有足够的代表发表评论):
如果您正在使用
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
不要忘记您可能需要sub("[.]", "", d$amount, perl=T)
来绕过.
字符。