问题描述
|
我有一系列CSV文件,其中数字使用逗号而不是小数点(即
0,5
而不是0.5
)以欧洲风格格式化。
这些文件太多,无法在导入到R中之前对其进行编辑。我希望对read.csv()
函数有一个简单的参数,或者希望有一种方法应用于提取的数据集,以使R将数据视为数字而不是一个字符串。
解决方法
当您勾选
?read.table
时,您可能会找到所需的所有答案。
(大陆)欧洲csv文件存在两个问题:
csv中的ѭ4代表什么?对于标准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=\";\")
假设此导入的字段称为\“ amount \”,如果您将数字作为字符读入,则可以通过这种方式固定类型:
d$amount <- sub(\",\",\".\",d$amount)
d$amount <- as.numeric(d$amount)
从excel或excel csv导入时,我经常会遇到这种麻烦以及其他一些烦恼。似乎没有一致的方法可以确保导入R时获得期望的结果,事后修补似乎是最好的方法。我的意思是,请查看您导入的内容-确保它是您期望的,如果没有,请进行修复。
,可以如下使用:
mydata <-read.table(fileIn,dec = \“,\”)
输入文件(fileIn):
D:\\ TEST>更多input2.txt
2014年6月5日09:19:38 3,182534 0
2014年6月5日09:19:51 4,2311 0
,如果您指出缺失值的表示方式(na.strings = ...),也可能会解决问题。例如,此处的V1和V2具有相同的格式(在csv文件中,小数用\“,\”分隔),但是由于NA出现在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
,也许
as.is=T
这也防止将字符列转换为因数
,只是为了补充上述Brandon的答案,这对我来说很有效(我没有足够的代表对此发表评论):
如果您正在使用
d$amount <- sub(\",d$amount)
d$amount <- as.numeric(d$amount)
不要忘记,您可能需要ѭ25才能避开ѭ9字符。