R中如何读取数据

(1)原文地址  http://blog.sina.com.cn/s/blog_60725463010140i8.html

对于在文件读取和写入的工作,R使用工作目录来完成。可以使用命
令getwd() (获得工作目录)来找到目录,使用命令setwd("C:/data") 或
者setwd("/home/paradis/R") 来改变目录。如果一个文件不在工作目录里
则必须给出它的路径8。
R可以用下面的函数读取存储在文本文件(ASCII)中的数据:read.table
(其中有若干参数,见后文),scan和read.fwf。R也可以读取以其他格式的
文件(Excel, SAS, SPSS, . . . ) 和访问SQL类型的数据库,但是基础包中并不
包含所需的这些函数。这些功能函数对于R的高级应用是十分有用的,但是我
们在这里将读取文件限定在ASCII格式。
函数read.table用来创建一个数据框,所以它是读取表格形式的数据的
主要方法。举例来说,对于一个名为data.dat的文件,命令:
> mydata <- read.table("data.dat")
将创建一个数据框名为mydata,数据框中每个变量也都将被命名,
缺省值为V1, V2, . . . 并且可以单独地访问每个变量,

代码为:mydata$V1,mydata$V2, . . . , 或者用mydata["V1"], mydata["V2"], . . . ,

或者还有一种方法,mydata[, 1], mydata[,2 ], . . . 9 这里有一些选项的缺省值(即如果用户不设定那么R将自动使用的值)见于下表:
read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".",row.names, col.names, as.is = FALSE, na.strings = "NA",colClasses = NA, nrows = -1,skip = 0, check.names = TRUE, fill=! blank.lines.skip,strip.white = FALSE, blank.lines.skip = TRUE,comment.char = "#")
file 文件名(包在""内,或使用一个字符型变量),可能需要全路径(注意即使是在Windows下,符号n 也不允许包含在内,必须用/替
换),或者一个URL链接(http://...)(用URL对文件远程访问)
header 一个逻辑值(FALSE or TRUE),用来反映这个文件的第一行是否包含
变量名
sep 文件中的字段分离符,例如对用制表符分隔的文件使用sep="nt"
quote 指定用于包围字符型数据的字符
dec 用来表示小数点的字符
row.names 保存着行名的向量,或文件中一个变量的序号或名字,缺省时行号取
为1, 2, 3, . . .
col.names 指定列名的字符型向量(缺省值是:V1, V2, V3, . . . )
as.is 控制是否将字符型变量转化为因子型变量(如果值为FALSE),或者仍
将其保留为字符型(TRUE)。as.is可以是逻辑型,数值型或者字符
型向量,用来判断变量是否被保留为字符。
na.strings 代表缺失数据的值(转化为NA)
colClasses 指定各列的数据类型的一个字符型向量
nrows 可以读取的最大行数(忽略负值)
skip 在读取数据前跳过的行数
check.names 如果为TRUE,则检查变量名是否在R中有效
fill 如果为TRUE且非所有的行中变量数目相同,则用空白填补
strip.white 在sep已指定的情况下,如果为TRUE,则删除字符型变量前后多余的
空格
blank.lines.skip 如果为TRUE,忽略空白行
comment.char 一个字符用来在数据文件中写注释,以这个字符开头的行将被忽略
(要禁用这个参数,可使用comment.char = "")
read.table的几个变种因为使用了不同的缺省值可以用在几种不同情况
下:
read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".",
fill = TRUE, ...)
read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",",
fill = TRUE, ...)
read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".",
fill = TRUE, ...)
read.delim2(file, header = TRUE, sep = "\t", quote="\"", dec=",",
fill = TRUE, ...)
函数scan比read.table要更加灵活,它们的区别之一是前者可以指定变
量的类型,例如:
> mydata <- scan("data.dat", what = list("", 0, 0))
读取了文件data.dat中三个变量,第一个是字符型变量,后两个是数值
型变量。另一个重要的区别在于scan()可以用来创建不同的对象,向量,矩
阵,数据框,列表. . . 在上面的例子中,mydata是一个有三个向量的列表。
在缺省情况下,也就是说,如果what被省略,scan()将创建一个数值型向
量。如果读取的数据类型与缺省类型或指定类型不符,则将返回一个错误信
息。这些选项在下面进行说明。
scan(file = "", what = double(0), nmax = -1, n = -1, sep = "",
quote = if (sep=="\n") "" else "'\"", dec = ".",
skip = 0, nlines = 0, na.strings = "NA",
flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE,
blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "")
file 文件名(在""之内), 可能包含它的路径(符号n 不允许使用,必须用/替代, 即使是在Windows下面) ,或者使用一个URL链接(http://...);如果&macr;le="",数据从键盘输入(使用一个空白行终止输入)

what 指定数据的类型(缺省值为数值型)
nmax 要读取数据的最大数量,如果what是一个列表,nmax则是可以读取
的行数(在缺省情况下,scan读取到文件最末端为止的所有数据)
n 要读取数据的最大数量(在缺省情况下,没有限制)
sep 文件中的字段分隔符
quote 用来包围字符型值
dec 用来表示小数点的字符
skip 在读取数据前跳过的行数
nlines 要读取的行数
na.string 表示缺失数据的字符串(转化为为NA)
flush 一个逻辑值,如果为TRUE,当读取完指定列数后scan将转到下一行(这样就允许用户在数据文件中添加注释,即添加在指定列数之后)
fill 如果为TRUE,且非所有的行中变量数目相同,则用空白填补
strip.white 在sep已指定的情况下,如果为TRUE,则删除字符型变量前后多余的空格
quiet 一个逻辑值,如果为FALSE,scan显示一行信息说明哪些字段被读取
blank.lines.skip 如果为TRUE,忽略空白行
multi.line 当what是一个列表时,若为FALSE则表示列表中每个个体的所有变量都在同一行中
comment.char 指定注释开始字符,一行中以这个字符开头的部分将被忽略(缺是禁用此选项)

函数read.fwf可以用来读取文件中一些固定宽度格式的数据:
read.fwf(file, widths, sep="\t", as.is = FALSE,skip = 0, row.names, col.names, n = -1, ...)
除了widths用来说明读取字段的宽度外,选项与read.table()基本相同。举例来说,如果在一个名为data.txt的文件中有一组如右所示的数据,可以读取这些数据用下面的命令:
A1.501.2
A1.551.3
B1.601.4
B1.651.5
C1.701.6
C1.751.7
> mydata <- read.fwf("data.txt", widths=c(1, 4, 3))
> mydata
V1 V2 V3
1 A 1.50 1.2
2 A 1.55 1.3
3 B 1.60 1.4
4 B 1.65 1.5
5 C 1.70 1.6
6 C 1.75 1.7

 

(2)原文地址http://blog.sina.com.cn/s/blog_6caea8bf0100wm1n.html

这是这两天的项目中碰到的两个小问题,记录一下。
    第一个问题:在做数据分析时,经常会碰到一些字段是以0开头的数字,在使用函数read.table或者read.csv等读取文件时,总是把这些字段认为是数值型的,自动的将开头的0去掉。如何解决这个问题呢?

可以通过设定read.table或者read.csv的参数colClasses="character"来实现。

    第二个问题:使用函数read.table读取文件时,如果遇到文件中某些行的数据不规则,会出现这样的错误:scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :   19行没有4元素。如果希望忽略掉这样的错误,直接读取,如何解决?

可以通过设定read.table的参数 fill=TRUE 实现。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值