R获取数据的三种途径
更好的一篇指导博客:R语言学习笔记(八)–读写文件与网络爬虫
- 利用键盘来读取数据。
- 通过读取存储在外部文件上的数据。
- 通过访问数据库系统来获取数据。
一、键盘读取数据
首先根据自己的需求输入数据,使用data.frame()
函数将其构建为数据框。
如果想要构建一个不包含数据的数据框,并且想要向其中填写自己需要的内容的话,可以使用edit()
函数:
为每一列数据框的数据定义其类型,包括character(),numeric()等等,随后是有edit()函数即可生成以下表格,并且可以手动的输入数据进行存储:
如果需要再次对其中的数据进行修改时,使用fix()函数
,即可再次对其中的内容进行编辑:
二、读取文件数据
①打开txt文件
读取文件数据常用的函数为read.table()
函数
①使用绝对路径②使用相对路径
使用read.table(‘文件名’)的方式打开txt文件
tips:如果使用文件的相对路径进行访问时,首先需要使用setwd()函数讲当前的工作路径调整到与文件同一目录下。
↑R提供了head()
和tail()
两个函数,用于展示文件头部和尾部的部分行的内容,默认为访问6行,可以根据自己的需要设置参数来调整访问的行数。
通常除了txt文件,还有例如csv类型的文件也通常用于存储数据。在csv文件中,不同的列的数据是使用','
逗号隔开的,如果直接对其进行访问时则会出现一堆,看着很不舒服。
因此,当我们想要访问csv文件时,可以使用sep参数,意思是将','
识别为分隔符,不输出分隔符。
此外read.table()函数的参数可以有以下用法:
①y <- read.table("input.csv",sep=',',header = TRUE)
header为逻辑变量,为TRUE可以隐藏表头名
(tips: 以上的v1v2v3 1 2 3都不在了)
②read.table('input.txt',header = TRUE,skip=145)
skip参数默认可以跳过前5行不显示,可自行修改参数↓
(tips: 跳过了前145行,直接输出剩下的内容)
③read.table('input.txt',skip=5,nrows = 20)
nrows表示显示到多少行。
(使用skip参数和nrows参数可以自由的控制想要输出的内容)
(tips:跳过前五行,依次输入20行的内容)
此外的一些重要参数:
①na.strings
可选的用于表示缺失值的字符向量。
na.strings=c("-9","?")把-9和?值在读取数据时候转换成NA
②stringsAsFactors
逻辑值,标记处字符向量是否需要转化为因子Factor,默认是TRUE。
stringsAsFactors = F意味着,“在读入数据时,遇到字符串之后,不将其转换为factors,仍然保留为字符串格式”。
(tips:字符串string是用于记录信息,Factor因子是用于给信息添加分类。)
此外的一些读取其他类型的函数:
三、读取网络文件
从url中读取数据
> t <- url("https://www.r-project.org/COPYING",encoding = "UTF-8")
> class(t)
[1] "url" "connection"
> d <- scan(t,what = character())
Read 2969 items
> head(d,n=20)
[1] "GNU" "GENERAL" "PUBLIC" "LICENSE"
[5] "Version" "2," "June" "1991"
[9] "Copyright" "(C)" "1989," "1991"
[13] "Free" "Software" "Foundation," "Inc."
[17] "59" "Temple" "Place," "Suite"
url()函数中包含的是目标地址和编码方式
scan("data_utf8.txt", what="", fileEncoding="UTF-8")
↑scan()函数中的what参数表示 从数据组寻找属于character()类型的数据
scan()
函数比read.table()函数更加灵活,区别之一是前者可以指定变量的类型,另一个特点在于scan()可以用来创建不同的对象、向量、矩阵、数据框和列表等等。
同时,R支持读取剪切板上的数据,例如从csv文件中复制部分内容
使用read.table(''clipboard")
即可获取剪切板上的数据信息:
按行读取数据:
**readLines(con, n)**
con:
一个connectin类的对象或一个字符串n:
期望读取的行数,负数则读到末尾
4.写入文件操作
常用的写入文件操作为与上文对应的write,table()
函数
write.table(x, file, append, quote, sep, row.names, col.names, fileEncoding)
append:
是否追加到已有的文件的末尾
quote:
字符型数据是否用双引号括起来
row.names:
行的名字是否输出
若想用更简单的方式将一个对象写入文件,可以使用命令write(),一般格式为:
write(x, file='data', ncolumns=if(character(x)) 1 else 5, append=FALSE, sep=' ')
x
:对象的名字
ncolumns:
用来定义文件中的列数(默认情况下,如果x为字符型数据,则ncolumns=1;对于其它类型数据默认为5)
对于excel等文件的读写操作 需要依赖java环境才能使用,可以根据文章顶部的blog进行查询,本文只是自学笔记,因此不做赘述。