数据分析-R语言学习笔记(六)获取数据、读入文件
一、获取数据
R获取数据三种途径:
- 利用键盘输入数据;
- 通过读取存储在外部文件上的数据;
- 通过访问数据库系统来获取数据。
1、键盘输入数据

每一行对应一个病人的信息,称为观测;每一列对应一个变量。
手动输入:
> patientID <- c(1,2,3,4)
> admDate <- c("10/15/2009","11/01/2009","10/21/2009","10/28/2009")
> age <- c(25,34,28,52)
> diabetes <- c("Type1","Type2","Type1","Type1")
> status <- c("Poor","Improved","Excellent","Poor")
> data <- data.frame(patientID,admDate,age,diabetes,status)
> data
patientID admDate age diabetes status
1 1 10/15/2009 25 Type1 Poor
2 2 11/01/2009 34 Type2 Improved
3 3 10/21/2009 28 Type1 Excellent
4 4 10/28/2009 52 Type1 Poor
edit()函数可以自动调用一个允许手动输入数据的文本编辑器,不过不能直接调用edit,必须首先定义一个变量然后用edit修改这个变量。
我靠了,我闪退没保存,要命了。
> data2 <- data.frame(patientID=character(),admDate = character(),age=numeric(),diabetes=character(),status=character( + )) > data2 [1] patientID admDate age diabetes status <0 行> (或0-长度的row.names) > data2 <- edit(data2) > data2 patientID admDate age diabetes status 1 1 30/11/2023 25 <NA> Poor 2 2 <NA> 34 Type2 <NA> 3 3 <NA> 28 <NA> <NA> 4 4 <NA> 52 <NA> <NA>
如果想修改数据,再重新调用edit,修改之后赋值给原变量;也可以使用fix函数进行修改,直接保存:
> fix(data2)
2、文件读取数据
R语言能够处理的数据比较特殊,一般需要python或者Perl对数据进行预处理,再把数据导入R进行分析。
3、访问数据库获取数据
通过ODBC访问数据库
ODBC(Open Database Connectivity)开放数据库连接。
R中通过RODBC包来访问。
> install.packages("RODBC")
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:
https://cran.rstudio.com/bin/windows/Rtools/
试开URL’https://mirrors.pku.edu.cn/CRAN/bin/windows/contrib/4.3/RODBC_1.3-23.zip'
Content type 'application/zip' length 618607 bytes (604 KB)
downloaded 604 KB
程序包‘RODBC’打开成功,MD5和检查也通过
下载的二进制程序包在
C:\Users\Administrator\AppData\Local\Temp\RtmpGcFZ0p\downloaded_packages里
> library(RODBC)
> help(package="RODBC")
二、读入文件
1、读取本地文件:
如果文件不在当前目录下,可以使用文件的全路径(绝对路径或者相对路径),但是不能读取目录,必须是完整的路径。
> read.table("C:\\Users\\Administrator\\Desktop\\input.txt")
V1
1 随便
2 写
3 几行
4 字
head和tail的用法和Linux中一样:
> x<- read.table("C:\\Users\\Administrator\\Desktop\\input.txt")
Warning message:
In read.table("C:\\Users\\Administrator\\Desktop\\input.txt") :
incomplete final line found by readTableHeader on 'C:\Users\Administrator\Desktop\input.txt'
> head(x)
V1
1 随便
2 写
3 几行
4 字
> tail(x)
V1
1 随便
2 写
3 几行
4 字
> head(x,2)
V1
1 随便
2 写
sep参数设置文件是以什么为分隔符,默认是空白。csv文件是以逗号分隔的,要设置sep=",",不设置这个参数可能会出错:
> x<- read.table("F:\\Download\\ferroptosis_driver.csv")
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
line 1 did not have 19 elements
> x<- read.table("F:\\Download\\ferroptosis_driver.csv",sep=",")
skip参数跳过部分内容,有些文件开头会包含一些介绍性信息:(我发现txt文档中默认跳过#开头的行)
> read.table("C:\\Users\\Administrator\\Desktop\\input.txt")
V1
1 ???
2 *
3 随便
4 写
5 几行
6 字
> read.table("C:\\Users\\Administrator\\Desktop\\input.txt",skip=4)
V1
1 随便
2 写
3 几行
4 字
nrow参数用来设置读取行数
> read.table("F:\\Download\\ferroptosis_driver.csv",sep=",",nrows = 10)skip
skip和nrow组合起来可以读取文件中任意部分。
....等等等等其他参数之后用的时候再学习。
2.读取网络文件
读取网页中的文本文件:就是把路径变成https这样的网络地址就好咯,其他参数一样用法。可以是HTTP,也可以是FTP,还可以是局域网中File开头的完整文件地址。
读取网页中的非文本文件借助XML:(老师演示也出错惹,反正用的时候再研究)
> library(XML) > ?readHTMLTable
R擅长的就是处理文本文件,可以将非文本文件另存为文本文件再read.table哈哈哈哈哈哈哈哈哈真的好朴实的解决方法,避其锋芒。那如果你非要处理,可以详细阅读XML包的帮助文档。
foreign包是R自带的包,可以很方便地处理其他软件的文件。

如果遇到其他格式的文件,不在foreign包处理范围内,一种办法是另存为文本文件,另外就是搜索R中对应的包,例如想要处理matlab格式的文件,就可以使用RSiteSearch("Matlab")搜索。
R还支持读取剪切板上的数据:
> x <- read.table("clipboard",header = T,sep=' ')
> x
CTLA4...2023.down.gastric cancer
1 IDO1\t\t\t2023\tdown\tgastric cancer
2 LGALS9\t\t\t2023\tdown\tgastric cancer
3 TNFRSF14\t\t\t2023\tdown\tgastric cancer
4 TNFRSF18\t\t\t2023\tdown\tgastric cancer
5 TNFRSF25\t\t\t2023\tdown\tgastric cancer
6 CDKN2A\t\t\t2023\tup\tcolon adenocarcinoma
7 GLS\t\t\t2023\tup\tcolon adenocarcinoma
8 LIPT1\t\t\t2023\tup\tcolon adenocarcinoma
> readClipboard()
[1] "CTLA4\t\t\t2023\tdown\tgastric cancer"
[2] "IDO1\t\t\t2023\tdown\tgastric cancer"
[3] "LGALS9\t\t\t2023\tdown\tgastric cancer"
[4] "TNFRSF14\t\t\t2023\tdown\tgastric cancer"
[5] "TNFRSF18\t\t\t2023\tdown\tgastric cancer"
[6] "TNFRSF25\t\t\t2023\tdown\tgastric cancer"
[7] "CDKN2A\t\t\t2023\tup\tcolon adenocarcinoma"
[8] "GLS\t\t\t2023\tup\tcolon adenocarcinoma"
[9] "LIPT1\t\t\t2023\tup\tcolon adenocarcinoma"
如果要读取压缩文件,无需提前解压缩,R可以直接读取,也不需要提前设置参数,直接读取就可以了:
> read.table(gzfile("input.txt.gz"))
遇到其他不标准的格式的时候,使用read.table或者其他都没办法,可以试试:
> ?readLines
> readLines(" 路径 ",n=5) #读取文件中各行并以字符串形式返回结果,参数n是最大读取的行数
或者scan函数,scan函数更为强大,它每次读取一个单元,并根据指令进行处理。第一个参数为文件地址,第二个参数为what用来描述scan期望文件输入的单元。what参数看帮助文档:
> ?scan
> scan("新建文本文档.txt",what = list(character(3),numeric(0)))
没有太多测试文件,也没怎么上手试,主打一个快速过一遍。不钻牛角尖,姐就是赶路人。
浙公网安备 33010602011771号