如何用逗号作为小数点分隔符来读取数字?
我有一系列的CSV文件,其中的数字是使用逗号而不是小数点来格式化欧洲风格,即0,5
而不是0.5
。
有太多的这些文件在导入到R之前编辑它们。我希望read.csv()
函数有一个简单的参数,或者是一个方法来应用于提取的数据集,以便R将数据视为一个数字而不是一个string。
当你检查?read.table
你可能会find你需要的所有答案。
(大陆)欧洲csv文件有两个问题:
- csv中的
c
代表什么? 对于标准的csv这是一个,
对于欧洲csv这是一个;
sep
是read.table
的相应参数 - 小数点的字符是什么? 对于标准的csv这是一个
.
,对于欧洲csv这是一个,
dec
是read.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)
来解决这个问题.
字符。