分享

R语言笔记2:读写数据所需的主要函数、与外部环境交互

 萌小芊 2018-03-08


Getting Data In and Out of R

(一)读取数据

读取数据所需的几种函数:
  • read.table、 read.csv:最常用的读取列表数据函数,可返回数据框形式。

  • readLines:逐行读取文本文件,返回一个字符向量

  • source:读取R代码、脚本

  • dget:读取R代码(读取的是以逆句法分析后以文本文件储存的R对象)

  • load、 unserialize:把二进制对象读入R

read.table()参数:
  • file:文件名(字符串,即文件路径)

  • header:逻辑标志,表明第一行是否有表头、行名(是变量名还是数据)

  • sep:分隔符(字符串,表明每一列是怎么分隔的,可能是逗号、冒号、空格等)

  • colClasses:字符向量(长度=数据集列数)说明数据集中每一列数据的类别

  • nrows:数据集中数据的行数

  • comment.char:字符串(用于表明文件中注释的字符)

  • skip:指定文件(非数据区域)从上到下多少行可忽略

  • stringsAsFactors:选择是否把文字变量编码为因子,默认为TRUE

将文件存至Rstudio识别的路径

read.table()函数中填写文件名之前,需要将文件存到正确的路径中

例如:

  1. > ## 查看保存路径

  2. > getwd()

  3. [1] 'd:/Program Files/RStudio'

  4. > ## 修改保存路径

  5. > setwd('E:/read data')

  6. > ## 读取文件

  7. > read.csv(data.csv, TRUE)

  8. >

  9. > ## 运行文件

  10. > data <- read.csv('data.csv', header = FALSE)

  11. > data

读取中小型数据集时

直接写文件名

  1. > data <- read.table('foo.txt')

读取大型数据集时

你需要先清楚该数据占多大内存,如果不设置其他参数,R会默认将整个数据集都载入内存中。

  • 如果文件中没有注释行的话,那可以把 comment.char 设置为空,即 comment.char=''

  • colClasses 参数很重要,如果不设置,R会扫描每一列数据并判断其类型,非常耗费时间。

  • 如果所有列都是同一数据类型,可以直接统一设置 colClasses=numeric

  • 如果所有列的数据类型不统一,可以通过设定 nrow()参数,如下

  1. initial <- read.table('datatable.txt', nrows = 100)          #先读前100行

  2. classes <- sapply (initial, class)                           #sapply()遍历每一列,调用class函数告诉你每一列的数据类型,然后将这些信息储存在classes中,

  3. tabALL <- read.table('datatable.txt', colClasses = classes)  #读取整个数据时,使用classes中的信息来指定colClasses)

(二)写入数据

与读取数据所用函数相对应的写入数据函数:
  • write.table、 write.csv

  • writeLines

  • dump

  • dput

  • save、 serialize

(三)输出函数

dump()dput()是两种重要的输出函数,用于储存格式和数据。

它们可以包含更多元的数据,属于文本格式但是和表格形式有所不同。如果你对数据框使用 dump()dput() 函数,输出结果包括数据框每一列的数据类型,这样读取的是后就不用再次指定类别了。

sourcedget函数可以读取未经 dump()dput() 输出的数据

dput()

dput() 可以生成一些代码,这些代码可用于重建R对象:

  1. > ## Create a data frame

  2. > y <- data.frame(a = 1, b = 'a')  

  3. > ## Print 'dput' output to console

  4. > dput(y)                          

  5. structure(list(a = 1, b = structure(1L, .Label = 'a', class = 'factor')), .Names = c('a',

  6. 'b'), row.names = c(NA, -1L), class = 'data.frame')

输出也可以直接保存到文件中,然后通过 dget() 读取:

  1. > ## Send 'dput' output to a file

  2. > dput(y, file = 'y.R')            

  3. > ## Read in 'dput' output from a file

  4. > new.y <- dget('y.R')            

  5. > new.y

  6.  a b

  7. 1 1 a

dump()

dump()函数和 dget()类似,区别是后者只能对单一R对象使用,而 dump() 可作用于多个R对象,接受的是一个包含对象名字的字符向量

  1. > ##创建两个对象x和y

  2. > x <- 'foo'

  3. > y <- data.frame(a = 1L, b = 'a')

  4. > ## 传递dump参数,包含对象的名字,以及另一个文件名,即将这些对象储存在这个文件中

  5. > dump(c('x', 'y'), file = 'data.R')

  6. > ##删除两个对象

  7. > rm(x, y)

  8. > ##对储存对象调用source函数

  9. > source('data.R')

  10. > ##重建x, y

  11. > str(y)

  12. 'data.frame':   1 obs. of  2 variables:

  13. $ a: int 1

  14. $ b: Factor w/ 1 level 'a': 1

  15. > x

  16. [1] 'foo'

(四)与外部环境交互

R通过一些主要函数与外界交互,建立联系。

最常见的联系是与文件建立关联。如 file() 读取文本文件 、 gzfile()bzfile()读取压缩文件等。 url() 可用于与网页建立联系。

联系交互背后的思想是它提炼出与不同类型的R外部对象建立联系的机制。

file函数的几种参数

其中,description是文件名,open参数需要一个标识,包括r(读取,reading),w(写入,writing),a(附加,appending),rb、wb和ab分别表示读取、写入和附加二进制文件。

  1. > str(file)

  2. function (description = '', open = '', blocking = TRUE, encoding = getOption('encoding'),

  3.    raw = FALSE, method = getOption('url.method', 'default'))  

举例,查看名为'foo.txt'的csv.文件

  1. > ## Create a connection to 'foo.txt'

  2. > con <- file('foo.txt')      

  3. >

  4. > ## Open connection to 'foo.txt' in read-only mode

  5. > open(con, 'r')              

  6. >

  7. > ## Read from the connection

  8. > data <- read.csv(con)        

  9. >

  10. > ## Close the connection

  11. > close(con)                

以上三行命令和直接使用read.csv函数的效果一样,因此建立联系的必要性不大

  1. > data <- read.csv('foo.txt')

但是当你只想读取文件的一部分的话,联系是有必要的。例如,建立联系后,使用readLines函数读取文件前10行:

  1. > ## Open connection to gz-compressed text file

  2. > con <- gzfile('words.gz')  

  3. > x <- readLines(con, 10)

  4. > x

  5. [1] '1080'     '10-point' '10th'     '11-point' '12-point' '16-point'

  6. [7] '18-point' '1st'      '2'        '20-point'

读取网页数据

首先使用 url() 函数与网页建立联系。然后通过readLines函数来读取文本。这是除了 read.table()read.csv()之外用来读取数据的另外一种方式。

  1. > ## Open a URL connection for reading

  2. > con <- url('http://www.', 'r')  

  3. >

  4. > ## Read the web page

  5. > x <- readLines(con)                      

  6. >

  7. > ## Print out the first few lines

  8. > head(x)                                  

  9. [1] ''                                              

  10. [2] ''                                            

  11. [3] ''                                                              

  12. [4] ''                                                        

  13. [5] ''                                    

  14. [6] ''

参考资料:

  1. https:///rdpeng/rprogdatascience/R Programming for Data Science

  2. 《R语言实战》 Robert I. Kabacoff

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多