在 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

我们可以通过两种方式控制读取哪些单元格

  1. 使用 n_max 参数返回 n 行
  2. 使用范围参数与 cell_rows 或 cell_cols 结合使用

例如,我们设置 n_max 等于 5 来导入前五行。

# Read the first five row: with header
iris <-read_excel(example, n_max =5, col_names =TRUE)

Excel 表格

如果我们将 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 表格

我们还可以使用参数范围来选择电子表格中的行和列。在下面的代码中,我们使用 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。

Excel 表格

在第二个示例中,我们使用函数 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 列,带标题。我们返回所有列的前四行,带标题

Excel 表格

如果我们想要导入不是从第一行开始的行,我们必须包含 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)

Excel 表格

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。我们可以通过两个函数的组合来计算缺失值的数量

  1. 总和
  2. 伊斯那

这是代码

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”)