文章和代码曾经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 R语言 也可获取。

实际上,R 中有大量的内置数据集可用于剖析和实际,咱们也能够在R 中创立模仿特定散布的数据。而在理论工作中,数据分析者更多时候面对的是来自多种数据源的内部数据,即各式各样扩展名的数据文件,如 .txt、.csv、.xlsx、.xls 等。不同扩展名的文件代表不同的文件格式,这经常会给剖析者带来困扰。

R 提供了适用范围宽泛的数据导入工具。

1.获取内置数据集

R 中的内置数据集存在于各个包中,其中根本包 datasets 里只有数据集,没有函数。这个包提供了近 100 个数据集,涵盖医学、天然、社会学等各个领域。

你能够用上面的命令进行查看:

data(package = "datasets")

如果想要调用某个数据集,能够应用 data( ) 函数。运行上面的命令,R 会加载数据集 iris 到工作空间。

data(iris)

除了 datasets 包,R 中很多其余的包也带有数据集。如果不是运行 R 后主动加载的根本包,咱们须要装置和加载这些包当前能力应用其中的数据。上面以 MASS 包里的数据集 bacteria 为例阐明数据的调用过程:

library(MASS)data(bacteria)

2. 模仿特定散布的数据

R 提供了一系列能够用于数值模仿的函数。这些函数以 r 结尾,罕用的有:rnorm( )、runif( )、rbinom( )和 rpois( ) 等。例如:

# 后续可视化局部会具体介绍直方图r1 <- rnorm(n = 100, mean = 0, sd = 1)# head(r1) # 取前 5 个值看看hist(r1)r2 <- runif(n = 10000, min = 0, max = 100)hist(r2)r3 <- rbinom(n = 80, size = 100, prob = 0.1)hist(r3)r4 <- rpois(n = 50, lambda = 1)hist(r4)

3. 获取其余格局的数据

3.1 txt 与csv 格局

如果数据起源是一个用 Windows 记事本或其余纯文本编辑器所创立的 ASCII 格式文件,咱们能够应用函数 read.table( ) 读取其中的数据,返回的是一个数据框。

例如,假如创立的数据框 patients 的数据文件 patients.txt 寄存于当前工作目录下,咱们能够应用上面的命令读取该数据:

# getwd() # 获取当前工作目录# 长期创立下 patients.txt 数据文件ID <- 1:5sex <- c("male", "female", "male", "female", "male")age <- c(25, 34, 38, 28, 52)pain <- c(1, 3, 2, 2, 3)      pain.f <- factor(pain, levels = 1:3, labels = c("mild", "medium", "severe"))   patients <- data.frame(ID, sex, age, pain.f)write.table(patients, "patients.txt", row.names = FALSE)patients.data <- read.table("patients.txt", header = TRUE)patients.data

在电子表格和数据库利用中常常会生成带分隔符的文本文件,其中 .csv 文件是用逗号分隔取值(Comma Separated Values)。函数 read.csv( ) 是函数 read.table( ) 的一个变体,专用于读取 .csv 文件。

read.table ( )read.csv ( ) 两个函数中参数的默认值是不同的。
在函数 read.table ( ) 中,参数 header 默认值为 FALSE,即认为文件第一行开始就是数据而非变量名。
而在函数 read.csv ( ) 中,参数 header 默认值为 TRUE。因而,在读入数据前,倡议先关上原始文件进行查看,而后设置失当的参数正确地读入数据。
write.csv(patients, "patients.csv", row.names=FALSE)patients.data <- read.csv("patients.csv")patients.data

3.2 xls 或 xlsx 格局

读取电子表格数据有很多种形式,其中最简略的形式是在 Excel 中将数据文件另存为一个逗号分隔(.csv)文件,而后用上述读取.csv 文件的办法将其读入R。还能够借助第三方包(例如 openxlsx 包、readxl 包和 gdata 包)间接读取 xlsx 或 xls 格局的数据文件

以 openxlsx 包为例:

library(openxlsx)write.xlsx(patients, "patients.xlsx")patients.data <- read.xlsx("patients.xlsx", sheet = 1)patients.data

3.3 导入其余统计软件的数据

有时咱们须要读取其余统计软件产生的数据,如 SPSS、SAS、Stata、Minitab 等。一种办法是从其余统计软件将数据输入为文本文件,而后应用函数 read.table( ) 或 read.csv( ) 将数据读入 R。另一种办法是借助扩大包,比方 foreign 包,该包的次要性能就是读写其余统计软件的数据。

上面以导入 SPSS 数据文件为例进行阐明。

假如数据文件 patients.sav 寄存于当前工作目录下,咱们能够应用上面的命令将该数据集读入 R:

# 为了节约附件数量,让咱们间接从下载到工作区URL <- "http://download.kesci.com/qlhatmok4/patients.sav"download.file(URL, destfile = "./patients.sav", method="curl")library(foreign)# 函数 `read.spss( )` 中的参数 `to.data.frame` 默认为 FALSE,如果不设置为 TRUE,返回的将是一个列表模式数据。patients.data <- read.spss("patients.sav" , to.data.frame = TRUE)patients.data

用 foreign 包导入SAS、Stata 等软件的数据文件的过程与下面相似,具体请查阅文档。

4.数据录入

在 R 中能够间接输出数据,然而如果数据量较大(超过 10 列或超过 30 行),在 R 里录入数据并不是一个最佳抉择。咱们能够抉择电子表格软件录入小规模的数据,比方 Excel。

然而如果数据量很大,应用电子表格软件手工录入数据的出错概率也较大。这时,专门为数据录入而设计的程序软件更为适合,比方收费的软件 EpiData。该软件不仅能够不便地设置数据录入的约束条件,比方范畴查看、主动换行等,还能够对每个变量和变量值增加标签。

foreign 包里的函数 read.epiinfo( ) 能够间接读取 EpiData 生成的 .rec 文件,然而倡议先在 EpiData 中将录入的数据导出为 Stata 数据文件,而后在 R 中应用函数 read.dta( ) 读入数据。这样做的益处是能够保留在 EpiData 中预设的变量的属性,例如变量标签和形容等。