2.3.2 从带分隔符的文本文件导入数据(read.table())

2.3.2 从带分隔符的文本文件导入数据(read.table())

你可以使用read.table()从带分隔符的文本文件中导入数据。此函数可读入一个表格格式的文件并将其保存为一个数据框。表格的每一行分别出现在文件中每一行。其语法如下:

mydataframe <- read.table(file,options)

其中,file是一个带分隔符的ASCII文本文件,options是控制如何处理数据的选项,如下表列出了常见的选项:


选项 描述

header 一个表示文件是否在第一行包含了变量名(表头)的逻辑型变量

sep 分开数据值的分隔符。默认是sep="",这表示了一个或多个空格、制表符、换行或回 车。使用sep=",“来读取用逗号来分隔行内数据的文件,使用sep=”\t"来读取使用制 表符来分割行内数据的文件

row.names 一个用于指定一个或多个行标记符的可选参数

col.names 如果数据文件的第一行不包括变量名(表头)(header=FALSE),你可以用col.names 去指定一个包含变量名的字符向量。如果header=FALSE以及col.names选项 被省略了,变量会分别命名为v1、v2,以此类推

na.strings 可选的用于表示缺失值的字符向量。比如说,na.strings=c("-9","?")把-9和?值在读取 数据的时候转换成NA

colClasses 可选的分配到每一列的类向量。比如说colClasses=c

​ (“numeric”,“numeric”,“character”,“NULL”,“numeric”)把前两列读取为数值型变量, 把第三列读取为字符型变量,跳过第四列,把第五列读取为数值型变量,如果数据有 多于五列,colClasses的值会被循环。当你在读取大型文本文件的时候,加上 colClasses选项可以可观的提升处理的速度

quote 用于对有特殊字符的字符串规定界限的字符串。默认值是双引号(")或单引号(’)

skip 读取数据前跳过的行的数目。这个选项在跳过头注释的时候比较有用

stringsAsFactors 一个逻辑变量,标记处字符向量是否需要转化成因子。默认值是TRUE,除非它被 colClasses所覆盖。当你在处理大型文本文件的时候,设置stringsAsFactors=FALSE 可以提升处理速度

text 一个指定文字进行处理的字符串。如果text被设置了,file应该被留空。2.3.1节给出 了一个例子


考虑一个名为studentgrades.csv的文本文件,它包含了学生在数学、科学和社会学习的分数。文件中每一行表示一个学生,第一行❶包含了变量名(表头),用逗号分隔。每一个单独的行都包含了学生的信息,它们也是用逗号进行分隔的。文件的内容如下:

❶studentID,First,Last,Math,Science,Social Studies
011,Bob,Smith,90,80,67
012,Jane,Weary,75,80
010,Dan,“Thornton,III”,65,75,70
040,Mary,“O’Leary”,90,95,92

这个文件可以用以下语句来读入成一个数据框:

> grades <- read.table(❶"data.csv",❷header = TRUE,
> ❸sep =",",❹ row.names = "studentID" )
> grades
   First         Last Math Science Social.Studies
11   Bob        Smith   90      80             67
12  Jane        Weary   75      NA             80
10   Dan Thornton,III   65      75             70
40  Mary      O'Leary   90      95             92
> str(grades)
'data.frame':	4 obs. of  5 variables:
 $ First         : Factor w/ 4 levels "Bob","Dan","Jane",..: 1 3 2 4
 $ Last          : Factor w/ 4 levels "O'Leary","Smith",..: 2 4 3 1
 $ Math          : int  90 75 65 90
 $ Science       : int  80 NA 75 95
 $ Social.Studies: int  67 80 70 92

如何导入数据有很多有趣的要点。变量名social studies被自动的根据R的习惯所重命名。列studentID现在是行名,不再是列名,也失去了前置的0,jane的缺失的科学课成绩被正确的识别为缺失值。我不得不在Dan的姓周围用引号包围住,从而避免Thornton和III之间的空格。否则R会在那一行读出7个值而不是六个值。

标记❶表示读取"data.csv"这个数据表,标记❷表示这个表包含变量(表头),标记❸表示这个数据表是用","来做分隔符的,标记❹表示把原来的列名studentID修改成行名。

此外,还可以使用colClasses选项选项去对每一列都指定一个类(比如说:逻辑型、数值型、字符型或因子型)以下代码导入的文件为同一个文件,但是结果会有所不同,请注意对比:

> grades <- read.table("data.csv",header = TRUE,
                      row.names = "studentID",sep = ",",
                     ❶colClasses = c("character","character",
                             "character","numeric","numeric",
                             "numeric"))
> grades
    First         Last Math Science Social.Studies
011   Bob        Smith   90      80             67
012  Jane        Weary   75      NA             80
010   Dan Thornton,III   65      75             70
040  Mary      O'Leary   90      95             92
> str(grades)
'data.frame':	4 obs. of  5 variables:
 $ First         : chr  "Bob" "Jane" "Dan" "Mary"
 $ Last          : chr  "Smith" "Weary" "Thornton,III" "O'Leary"
 $ Math          : num  90 75 65 90
 $ Science       : num  80 NA 75 95
 $ Social.Studies: num  67 80 70 92

从上面两个示例代码中看到,其实都差不多,只不过是第二个示例通过colClasses选项去对每一列都指定了一个类大家可以对照一下,所指标记❶的类是不是和查看到的类是一样的。

函数read.table()还拥有许多微调数据导入方式的追加选项。更多详情,请参阅help(read.table)。


用链接来导入数据
本章中的许多示例都是从用户计算机上已经存在的文件中导入数据。R也提供了若干种通过连接(connection)来访问数据的机制。例如函数file()、gzfile()、bzfile()、xzfile()、unz()和url()可作为文件名参数使用。函数file()允许你访问文件、剪贴板和C级别的标准输入。函数gzfile()、bzfile()、xzfile()和unz()允许你读取压缩文件。
函数url()能够让你通过一个含有http://、ftp://或file: // 的完整URL访问网络上的文件,还可以为HTTP何FTP连接指定代理。为了方便,(用双引号围住的)完整的URL也经常直接用来代替文件名使用。更多详情,参见help(file)。


你可能感兴趣的:(R,大数据,数据挖掘,数据分析)