从带分隔符的文本文件导入数据read.table()
read.table(file, header = FALSE, sep = “”,stringsAsFactors ,colClasses = NA)
File是带分隔符的ASCII文本文件,sep用来指定分割数据的分隔符,stringsAsFactors可以设置字符变量与因子之间的转换。colClasses为每一列指定一个类,也可以设置字符型变量和因子之间的转换。
一些需要考虑的问题:
(1)编码问题
如果文件中包含非-ASCII字符字段,要确保以正确的编码方式读取。这是在UTF-8的本地系统里面读取Latin-1文件的一个主要问题。
read.table(file(“file.dat”, encoding=”latin1”))
(2)首行问题
设定header参数,首行有对应列的字段,如果需要在R中看到这一行,设置header=TRUE。如果要读取的文件里面有行标签的头字段(可能为空),变量名比数据列少一个,则用
read.table(“file.dat”, header = TRUE, row.names = 1)
(3)分隔符问题
R中把任意多个连续的空格或制表符只算作一个。
对于空白分割的文件,可选择默认的sep=””,其他的空白分隔符有:空格,制表符,换行符
sep=” ”;sep = “\t”;sep = “\n”
(4) 字符字段中的空白
如果设定了分隔符,字符字段起始和收尾处的空白会作为字段的一部分看待。去掉这些空白,可以使用参数strip.white = TRUE.
(5)空白行
默认情况下,read.table()忽略空白行。设置blank.lines.skip = FALSE不忽略空白行,这个参数只有和fill=TRUE共同使用才有效,这时可能是用空白行表明规则数据中的缺损样本。
Fill如果为TRUE且非所有的行中变量数目相同,则会用空白填补。
(6)变量的类型
read.table 默认会为为数据框的每个变量选择一个合适的类型。如果字段没有缺损以及不能直接转换,它会按 logical, integer, numeric 和complex 的顺序依次判断字段类型。如果所有这些类型都失败了,变量会转变成因子。
参数 colClasses 和 as.is 提供了很大的控制权。 as.is 会 抑制字符向量转换成因子(仅仅这个功能)。 colClasses运行为输入中的每个列设置需要的类型。
(7)注释
默认情况下,read.table 用 # 在数据文件中写注释,如果碰到该字符,该行中其后的内容会被忽略。如果数据文件中没有注释内容或禁用这个参数,用Comment.char = “”比较安全。
常用函数read.csv(),read.delim是read.table函数的包装,分隔符分别为逗号、制表符,同样接受read.table所有参数。
如果数据集中含有中文,直接导入很有可能不识别中文,这时加上参数fileEncoding=’utf-8’
read.csv(‘data.csv’,fileEncoding=’utf-8’)
读取大的数据时,效率很重要,设定comment.char = “”,以原子向量类型(逻辑型,整型,数值型,复数型,字符型)设定每列的colClasses,给定需要读入的行数nrows(适当的高估一点比不设置这个参数好)等措施会提高效率。
首先reaadLines函数可以获得数据的行数(注意L为大写),先判断数据量。
Lines <- readLines(“item.csv”)
不包含注释符,设定读取的最大行数(不包括header行),从文件开头跳过的行数(不包括header行),指定每一列的数据类型(“NULL”指示跳过该列,NA表示软件自动识别每列的类型)
{r}
data5<-read.csv('item.csv',comment.char='',nrows=10,skip=2,
colClasses=list('integer','NULL','factor'))#跳过前两行和header
读取定宽文本文件(fixed-width file)
read.fwf函数,header=参数,as.is=参数,sep=参数等,同read.table。widths=参数是一个向量,向量值是要读入的字段宽度,负数表示跳过某列不读。
mydata <- read.fwf(file=”mydata.txt”, width=c(1,-1,2),
跳过数据文件中的第二列