在 R 中导入数据:读取 CSV、Excel、SPSS、Stata、SAS 文件
数据可以以各种格式存在。对于每种格式 R 具有特定的函数和参数。本教程讲解如何将数据导入 R。
读取 CSV
最广泛的数据存储之一是 .csv(逗号分隔值)文件格式。R 在启动时会加载一系列库,包括 utils 包。此包与 reading.csv() 函数结合使用,可方便打开 csv 文件。以下是 read.csv 的语法
read.csv(file, header = TRUE, sep = ",")
争论:
- 文件:文件存储的路径
- 头:确认文件是否有文件头,默认情况下,文件头设置为TRUE
- 九月:用于分割变量的符号,默认为`,`。
我们将读取数据文件名为 mtcats。csv 文件存储在线。如果您的 .csv 文件存储在本地,您可以替换代码片段中的 PATH。不要忘记将其包装在 ' ' 内。PATH 需要是一个字符串值。
对于 Mac 用户,下载文件夹的路径是:
"/Users/USERNAME/Downloads/FILENAME.csv"
对于 Windows 用户:
"C:\Users\USERNAME\Downloads\FILENAME.csv"
请注意,我们应该始终指定文件名的扩展名。
- 。CSV
- .XLSX
- 。文本
- ...
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv' df <- read.csv(PATH, header = TRUE, sep = ',') length(df)
输出
## [1] 12
class(df$X)
输出
## [1] "factor"
默认情况下,R 将字符值作为 Factor 返回。我们可以通过添加 stringsAsFactors = FALSE 来关闭此设置。
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv' df <-read.csv(PATH, header =TRUE, sep = ',', stringsAsFactors =FALSE) class(df$X)
输出
## [1] "character"
变量 X 的类现在是一个字符。
读取 Excel 文件
Excel 文件在数据分析师中非常流行。电子表格易于使用且灵活。R 配备了库 readxl 来导入 Excel 电子表格。
使用此代码
require(readxl)
检查您的机器上是否安装了 readxl。如果您使用 r-conda-essential 安装 r,则该库已安装。您应该在命令窗口中看到:
输出
Loading required package: readxl.
如果包不存在,你可以用 conda 安装它 图书馆 或者在终端中,使用 conda install -c mittner r-readxl。
使用以下命令加载库以导入excel文件。
library(readxl)
readxl_example()
我们在本教程中使用 readxl 包中包含的示例。
使用代码
readxl_example()
查看库中所有可用的电子表格。
要检查名为 clippy.xls 的电子表格的位置,只需使用
readxl_example("geometry.xls")
如果您使用 conda 安装 R,则电子表格位于 Anaconda3/lib/R/library/readxl/extdata/filename.xls
读取excel()
在打开 xls 和 xlsx 扩展名时,函数 read_excel() 非常有用。
语法是:
read_excel(PATH, sheet = NULL, range= NULL, col_names = TRUE) arguments: -PATH: Path where the excel is located -sheet: Select the sheet to import. By default, all -range: Select the range to import. By default, all non-null cells -col_names: Select the columns to import. By default, all non-null columns
我们可以从 readxl 库导入电子表格并计算第一张表中的列数。
# Store the path of `datasets.xlsx` example <- readxl_example("datasets.xlsx") # Import the spreadsheet df <- read_excel(example) # Count the number of columns length(df)
输出
## [1] 5
excel_sheets()
文件 datasets.xlsx 由 4 个工作表组成。我们可以使用 excel_sheets() 函数找出工作簿中有哪些工作表可用
example <- readxl_example("datasets.xlsx") excel_sheets(example)
输出
[1] "iris" "mtcars" "chickwts" "quakes"
如果工作表包含多张工作表,则可以使用工作表参数轻松选择特定工作表。我们可以指定工作表的名称或工作表索引。我们可以使用 same() 验证两个函数是否返回相同的输出。
example <- readxl_example("datasets.xlsx") quake <- read_excel(example, sheet = "quakes") quake_1 <-read_excel(example, sheet = 4) identical(quake, quake_1)
输出
## [1] TRUE
我们可以通过两种方式控制读取哪些单元格
- 使用 n_max 参数返回 n 行
- 使用范围参数与 cell_rows 或 cell_cols 结合使用
例如,我们设置 n_max 等于 5 来导入前五行。
# Read the first five row: with header iris <-read_excel(example, n_max =5, col_names =TRUE)
如果我们将 col_names 更改为 FALSE,R 会自动创建标题。
# Read the first five row: without header iris_no_header <-read_excel(example, n_max =5, col_names =FALSE)
iris_no_header
在数据框 iris_no_header 中,R 创建了五个新变量,分别名为 X__1、X__2、X__3、X__4 和 X__5
我们还可以使用参数范围来选择电子表格中的行和列。在下面的代码中,我们使用 excel 样式来选择范围 A1 到 B5。
# Read rows A1 to B5 example_1 <-read_excel(example, range = "A1:B5", col_names =TRUE) dim(example_1)
输出
## [1] 4 2
我们可以看到 example_1 返回 4 行 2 列。数据集有标题,因此尺寸为 4×2。
在第二个示例中,我们使用函数 cell_rows() 来控制要返回的行的范围。如果我们要导入 1 到 5 行,我们可以设置 cell_rows(1:5)。请注意,cell_rows(1:5) 返回的输出与 cell_rows(5:1) 相同。
# Read rows 1 to 5 example_2 <-read_excel(example, range =cell_rows(1:5),col_names =TRUE) dim(example_2)
输出
## [1] 4 5
但是 example_2 是一个 4×5 矩阵。鸢尾花数据集有 5 列,带标题。我们返回所有列的前四行,带标题
如果我们想要导入不是从第一行开始的行,我们必须包含 col_names = FALSE。如果我们使用 range = cell_rows(2:5),很明显我们的数据框不再有标题。
iris_row_with_header <-read_excel(example, range =cell_rows(2:3), col_names=TRUE) iris_row_no_header <-read_excel(example, range =cell_rows(2:3),col_names =FALSE)
We can select the columns with the letter, like in Excel. # Select columns A and B col <-read_excel(example, range =cell_cols("A:B")) dim(col)
输出
## [1] 150 2
注意:range = cell_cols(“A:B”),返回输出所有具有非空值的单元格。数据集包含 150 行,因此 read_excel() 返回最多 150 行。这可以通过 dim() 函数进行验证。
当单元格中出现没有数值的符号时,read_excel() 返回 NA。我们可以通过两个函数的组合来计算缺失值的数量
- 总和
- 伊斯那
这是代码
iris_na <-read_excel(example, na ="setosa") sum(is.na(iris_na))
输出
## [1] 50
我们缺少 50 个值,这些值是属于 setosa 物种的行。
从其他统计软件导入数据
我们将使用 heaven 包导入不同的文件格式。此包支持 SAS、STATA、SPSS等软件中,我们可以使用以下函数根据文件的扩展名打开不同类型的数据集:
- SAS: read_sas()
- STATA:read_dta()(或 read_stata(),相同)
- SPSS:read_sav() 或 read_por()。我们需要检查扩展名
这些函数中只需要一个参数。我们需要知道文件存储的路径。就这样,我们就可以打开 SAS、STATA 和 SPSS 中的所有文件了。这三个函数也接受 URL。
library(haven)
haven 带有 conda r-essential,否则请转到 链接 或者在终端中安装 -c conda-forge r-haven
阅读 sas
为了举例,我们将使用来自 IDRE 的录取数据集。
PATH_sas <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sas7bdat?raw=true' df <- read_sas(PATH_sas) head(df)
输出
## # A tibble: 6 x 4 ## ADMIT GRE GPA RANK ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
阅读 STATA
对于 STATA 数据文件,您可以使用 read_dta()。我们使用完全相同的数据集,但存储在 .dta 文件中。
PATH_stata <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.dta?raw=true' df <- read_dta(PATH_stata) head(df)
输出
## # A tibble: 6 x 4 ## admit gre gpa rank ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
阅读 SPSS
我们使用 read_sav() 函数打开 SPSS 文件。文件扩展名“.sav”
PATH_spss <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sav?raw=true' df <- read_sav(PATH_spss) head(df)
输出
## # A tibble: 6 x 4 ## admit gre gpa rank ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
数据导入的最佳实践
当我们想要将数据导入 R 时,执行以下清单很有用。它将使我们很容易将数据正确地导入 R:
- 电子表格的典型格式是使用第一行作为标题(通常是变量名称)。
- 避免使用空格来命名数据集;这可能会导致将其解释为单独的变量。或者,最好使用“_”或“-”。
- 最好使用简短的名称
- 名称中不要包含符号:即:exchange_rate_$_€ 不正确。最好将其命名为:exchange_rate_dollar_euro
- 否则,使用 NA 表示缺失值;我们需要稍后清理格式。
总结
下表总结了在 R 中导入不同类型文件时使用的函数。第一列表示与该函数相关的库。最后一列表示默认参数。
自学资料库 | 目的 | 功能 | 默认参数 |
---|---|---|---|
utils的 | 读取 CSV 文件 | 读取.csv() | 文件,标题 =,TRUE,sep =“,” |
读xl | 读取 EXCEL 文件 | 读取excel() | 路径,范围 = NULL,col_names = TRUE |
避风港 | 读取 SAS 文件 | 读取_sas() | 径 |
避风港 | 读取 STATA 文件 | 读取状态() | 径 |
避风港 | 阅读 SPSS 文件 | 读取_sav() | 径 |
下表显示了使用 read_excel() 函数导入选择的不同方法。
功能 | 目的 | 参数 |
---|---|---|
读取excel() | 读取 n 行 | n_max = 10 |
像在 Excel 中一样选择行和列 | 范围=“A1:D10” | |
选择有索引的行 | 范围=单元格行(1:3) | |
选择带有字母的列 | 范围 = 单元格列(“A:C”) |