0Pricing
R Academy · 课时

使用 read_csv() 读取 CSV 文件

使用列类型推断、跳过和编码选项导入分隔文件

使用 read_csv() 读取 CSV 文件 是 CoddyKit 上的免费 R Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。

为什么使用 readr,而不是基础 R?

基础 R 提供了 read.csv(),但 readr 软件包中的 read_csv() 速度更快,返回 tibble(而不是数据框),能够更好地猜测默认类型,还会提供有关所检测列类型的详细信息。

library(readr)

# read_csv() vs read.csv():
# 1. Returns a tibble (prints nicely, faster subsetting)
# 2. Does NOT convert strings to factors by default
# 3. Shows column specification message
# 4. Faster for large files

# Example with a simple inline CSV:
df <- read_csv('name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C')

print(df)
print(class(df))

从文件路径读取 read_csv()

最常见的用法是:将文件路径字符串传递给 read_csv()。该函数会自动将分隔符识别为逗号,将第一行读取为表头,并根据前 1000 行猜测列类型。

library(readr)

# Reading from a file path (illustrative — file not present)
# df <- read_csv('data/sales_2024.csv')

# Reading from a URL also works:
# df <- read_csv('https://example.com/data.csv')

# Using a literal inline string for demonstration:
df <- read_csv('region,q1,q2,q3
East,100,120,115
West,200,195,210
North,80,85,90')

print(df)

col_types — 指定列类型

使用 col_types 覆盖 readr 的类型猜测结果。您可以传入紧凑字符串(每列使用一个字符:c=字符型,d=双精度型,i=整型,l=逻辑型,D=日期型,_=跳过),也可以传入 cols() 规范。

library(readr)

df <- read_csv('id,date,amount,active
1,2024-01-15,99.99,TRUE
2,2024-02-20,149.50,FALSE
3,2024-03-10,75.00,TRUE',
# Compact: integer, Date, double, logical
col_types = 'iDdl')

print(df)
cat('\nColumn types:\n')
print(sapply(df, class))

使用 cols() 明确指定类型

如需更精细的控制,请使用 cols() 为每一列指定类型。可使用以下收集器函数:col_double()、col_character()、col_integer()、col_date(format=)、col_skip() 和 col_guess()。

library(readr)

df <- read_csv('id,name,score,date
1,Alice,85.5,2024-01-15
2,Bob,92.0,2024-02-20
3,Carol,78.3,2024-03-10',
col_types = cols(
  id = col_integer(),
  name = col_character(),
  score = col_double(),
  date = col_date(format = '%Y-%m-%d')
))

print(df)
print(class(df$date))

skip 和 n_max 参数

skip=n 会在读取前跳过开头的 n 行(适用于元数据或注释表头)。n_max=n 最多读取 n 行数据,非常适合预览大型文件或只加载第一个数据块。

library(readr)

# File with metadata in first 2 lines
# (simulated with literal string)
df <- read_csv('# Generated 2024-01-15
# Source: internal DB
name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C
Dave,88,B',
skip = 2,     # Skip the 2 comment lines
n_max = 3     # Read only 3 data rows
)

print(df)

na 参数 — 定义缺失值

默认情况下,read_csv() 会将空字符串和 NA 视为缺失值。使用 na 参数可以指定其他应读取为 NA 的字符串,常见示例包括:'N/A'、'NULL'、'-999' 和 '.'。

library(readr)

df <- read_csv('name,score,city
Alice,85,NYC
Bob,N/A,NULL
Carol,78,.
Dave,-999,Chicago',
na = c('', 'NA', 'N/A', 'NULL', '.', '-999')
)

print(df)
cat('NAs per column:\n')
print(colSums(is.na(df)))

col_names — 自定义列名

当文件没有表头行时,请设置 col_names = FALSE,readr 会自动将列命名为 X1、X2 等。或者,您也可以向 col_names 传入字符向量,以指定自定义名称并跳过表头行。

library(readr)

# File without headers
df <- read_csv('Alice,85,NYC
Bob,92,LA
Carol,78,Chicago',
col_names = c('name','score','city')
)

print(df)

# auto-names when no header:
df2 <- read_csv('1,2,3
4,5,6', col_names = FALSE)
print(df2)

locale() — 处理非标准格式

locale() 控制 readr 如何解读特定地区格式:小数标记(欧洲数据中使用 ',')、日期格式、编码和分组标记。请将其传递给 read_csv(locale=...)。

library(readr)

# European-style CSV: semicolons as delimiters, comma as decimal
# read_csv2() is shorthand for this locale
df <- read_csv2('name;price;qty
Alice;9,99;100
Bob;24,50;50',
locale = locale(decimal_mark=',')
)

print(df)

# For dates in non-ISO format:
parse_date('15/01/2024', format='%d/%m/%Y')

progress 和 show_col_types

对于大型文件,read_csv() 会显示进度条。设置 progress=FALSE 可以隐藏进度条(在脚本中很有用)。如果您已经验证过列类型,设置 show_col_types=FALSE 可以隐藏列类型提示。

library(readr)

# Suppress progress and type messages for production scripts
df <- read_csv(
  'a,b,c
  1,x,TRUE
  2,y,FALSE',
  show_col_types = FALSE,
  progress = FALSE
)

print(df)

Problems() — 诊断解析失败

当 readr 遇到与预期类型不匹配的值时,会将其替换为 NA 并记录警告。调用 problems(df) 可以准确查看哪些行和列存在问题,以及原始值是什么。

library(readr)

# Intentional type mismatch: 'N/A' in numeric column
df <- suppressWarnings(read_csv(
  'id,score
  1,85
  2,N/A
  3,92',
  col_types = cols(score = col_double())
))

print(df)
print(problems(df))

使用 map() 读取多个文件

将 readr 与 purrr::map() 结合使用,可以一步读取多个 CSV 文件并按行绑定。对于处理按月或按季度拆分、分别存储在不同文件中的数据,这种模式非常重要。

library(readr)
library(purrr)
library(dplyr)

# Simulated: read and bind multiple CSV files
files <- c('q1.csv', 'q2.csv', 'q3.csv')

# In practice:
# all_data <- map_df(files, read_csv, show_col_types=FALSE)

# Demonstration with inline data:
q1 <- read_csv('month,sales\nJan,100\nFeb,120', show_col_types=FALSE)
q2 <- read_csv('month,sales\nApr,130\nMay,145', show_col_types=FALSE)

bind_rows(list(q1=q1, q2=q2), .id='quarter')

快速检查

如何告诉 read_csv(),应将值 'N/A' 和 '-99' 视为缺失值(NA)?

回顾:使用 readr 的 read_csv()

使用 readr 读取 CSV 文件的要点:

  • read_csv('file.csv') — 读取 CSV,返回 tibble,并猜测列类型
  • col_types = 'idcl' 或 cols(x=col_double()) — 明确指定类型
  • skip=n — 跳过表头或元数据行;n_max=n — 限制读取的行数
  • na = c('N/A','NULL') — 将其他字符串视为 NA
  • locale(decimal_mark=',') — 处理欧洲数字格式
  • show_col_types=FALSE — 在脚本中隐藏类型信息
  • problems(df) — 查看解析失败情况
  • 与 map_df(files, read_csv) 结合以读取多个文件
library(readr)

# Production-ready read_csv() call
df <- read_csv(
  'name,score,city,active
  Alice,85,NYC,TRUE
  Bob,N/A,LA,FALSE
  Carol,78,NULL,TRUE',
  col_types = cols(
    name = col_character(),
    score = col_double(),
    city = col_character(),
    active = col_logical()
  ),
  na = c('', 'NA', 'N/A', 'NULL'),
  show_col_types = FALSE
)

print(df)

常见问题解答

「使用 read_csv() 读取 CSV 文件」课时是免费的吗?

是的 — 「使用 read_csv() 读取 CSV 文件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。

「使用 read_csv() 读取 CSV 文件」这节课中我会学到什么?

使用列类型推断、跳过和编码选项导入分隔文件 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 R Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用 read_csv() 读取 CSV 文件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 R Academy 课中编写并运行代码吗?

能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 read_csv() 读取 CSV 文件
  2. 解析 TSV 与定宽文件
  3. 使用 readxl 导入 Excel 文件
  4. 将数据写入多种格式
← 返回 R Academy