文章和代码曾经归档至【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:5
sex <- 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 中预设的变量的属性,例如变量标签和形容等。