当前位置: 首页 > news >正文

tidyverse-数据读入

好的!根据你的笔记内容,我将详细解释如何使用 readr 包中的函数来导入数据、处理数据导入过程中可能遇到的问题,以及如何将数据写入文件。以下是每个部分的详细说明和示例代码。

1. 从文件中读取数据

1.1 使用 read_csv() 读取 CSV 文件

read_csv()readr 包中用于读取 CSV 文件的主要函数。它会自动猜测列类型,并处理缺失值。

基本语法
read_csv(file, col_types = NULL, locale = default_locale(), na = c("", "NA"), ...)
  • file:文件路径。
  • col_types:指定列类型。
  • locale:设置语言环境。
  • na:指定缺失值的标记。
  • ...:其他参数,如 skipcomment 等。
示例

假设我们有一个名为 students.csv 的文件,内容如下:

id,name,age,meal_plan
1,John,20,"Standard"
2,Jane,22,"Premium"
3,Mike,21,"Standard"

使用 read_csv() 读取文件:

library(readr)students <- read_csv("students.csv")
print(students)
1.2 处理列名和缺失值
  • 默认情况下,read_csv() 将空字符串识别为 NA
  • 如果文件中使用其他标记表示缺失值(如 N/A),可以通过 na 参数指定。
示例
students <- read_csv("students.csv", na = c("", "NA", "N/A"))
print(students)

在数据文件中,缺失值(missing values)通常用特定的标记表示。常见的缺失值标记包括空字符串(“”)、NA 或 N/A。read_csv() 函数默认将空字符串(“”)识别为缺失值(NA),但如果你的数据中使用了其他标记(如 NA 或 N/A),你需要显式地告诉 read_csv() 如何识别这些标记。

1.3 列名处理

如果列名包含空格或特殊字符,可以用反引号引用。也可以使用 janitor::clean_names() 将列名转换为蛇形命名法

示例
library(janitor)students <- read_csv("students.csv") %>%clean_names()
print(students)

为了方便后续操作,你可以使用 janitor::clean_names() 函数将列名转换为蛇形命名法(snake_case)。蛇形命名法是一种常见的命名方式,使用下划线 _ 连接单词,而不是空格或特殊字符。

1.4 转换列类型

可以通过 mutate() 将分类变量转换为因子类型。

示例
library(dplyr)students <- students %>%mutate(meal_plan = factor(meal_plan))
print(students)

2. 其他参数

2.1 skip 参数

跳过文件开头的行(如元数据)。

示例
students <- read_csv("students.csv", skip = 2)
print(students)
2.2 comment 参数

忽略以特定字符开头的注释行。

示例
students <- read_csv("students.csv", comment = "#")
print(students)
2.3 col_names 参数

可以设置为 FALSE,让 read_csv() 自动生成列名(如 X1X2 等),也可以手动指定列名。

示例
students <- read_csv("students.csv", col_names = c("id", "name", "age", "meal_plan"))
print(students)

3. 其他文件类型

3.1 read_csv2():读取以分号分隔的文件
students <- read_csv2("students.csv2")
print(students)
3.2 read_tsv():读取制表符分隔的文件
students <- read_tsv("students.tsv")
print(students)
3.3 read_delim():读取自定义分隔符的文件
students <- read_delim("students.delim", delim = "|")
print(students)
3.4 read_fwf():读取固定宽度字段的文件
students <- read_fwf("students.fwf", col_positions = fwf_positions(c(1, 6, 11, 16), c(5, 10, 15, 20)))
print(students)
3.5 read_table():读取空格分隔的固定宽度文件
students <- read_table("students.table")
print(students)
3.6 read_log():读取 Apache 日志文件
students <- read_log("students.log")
print(students)

4. 控制列类型

4.1 猜测类型

readr 通过启发式方法猜测列类型:

  • 包含 TRUEFALSENA 的列被识别为逻辑类型。
  • 包含数字的列被识别为数值类型。
  • 符合 ISO8601 标准的列被识别为日期或日期时间类型。
  • 其他列被识别为字符串类型。
4.2 缺失值与列类型问题

如果列中包含非标准的缺失值标记(如 .),可能导致列类型被错误识别为字符类型。可以通过 col_types 参数显式指定列类型。

示例
students <- read_csv("students.csv", col_types = cols(id = col_integer(),name = col_character(),age = col_double(),meal_plan = col_factor()
))
print(students)
4.3 列类型

readr 提供了 9 种列类型:

  • col_logical():逻辑类型。
  • col_double():双精度数值类型。
  • col_integer():整数类型。
  • col_character():字符类型。
  • col_factor():因子类型。
  • col_date():日期类型。
  • col_datetime():日期时间类型。
  • col_number():宽松的数值解析器,忽略非数值部分。
  • col_skip():跳过某些列。

可以通过 cols() 函数指定默认列类型或仅读取特定列。

示例
students <- read_csv("students.csv", col_types = cols(id = col_integer(),name = col_character(),age = col_double(),meal_plan = col_factor()
))
print(students)

5. 从多个文件中读取数据

使用 read_csv() 可以一次性读取多个文件,并将它们合并到一个数据框中。

示例

假设我们有多个销售数据文件(sales1.csvsales2.csv 等),可以使用以下代码读取并合并:

sales_files <- list.files(pattern = "sales*.csv")
sales_data <- map_dfr(sales_files, read_csv, .id = "file_name")
print(sales_data)

6. 写入文件

6.1 write_csv()write_tsv():写入 CSV 或 TSV 文件
write_csv(students, "students.csv")
write_tsv(students, "students.tsv")
6.2 write_rds()read_rds():以 R 的二进制格式保存和读取数据
write_rds(students, "students.rds")
students <- read_rds("students.rds")
6.3 arrow 包:读写 Parquet 文件
library(arrow)write_parquet(students, "students.parquet")
students <- read_parquet("students.parquet")

7. 数据输入

7.1 tibble():按列创建数据框
students <- tibble(id = c(1, 2, 3),name = c("John", "Jane", "Mike"),age = c(20, 22, 21),meal_plan = c("Standard", "Premium", "Standard")
)
print(students)
7.2 tribble():按行创建数据框
students <- tribble(~id, ~name, ~age, ~meal_plan,1, "John", 20, "Standard",2, "Jane", 22, "Premium",3, "Mike", 21, "Standard"
)
print(students)

8. 总结

  • 使用 read_csv() 导入 CSV 文件,可以通过 col_types 参数显式指定列类型。
  • 处理数据导入过程中可能遇到的问题,例如列类型猜测错误和缺失值处理。
  • 使用 write_csv()write_rds()write_parquet() 将数据写入文件以供后续使用。
  • 使用 tibble()tribble() 手动创建数据框。

通过这些工具,你可以高效地导入、处理和保存数据,为数据分析做好准备。

http://www.dtcms.com/a/288878.html

相关文章:

  • 基于智慧经营系统的学校住宿登记报表分析与应用探究-毕业论文—仙盟创梦IDE
  • 如何防止任务长期处于“等待”状态
  • Python基础和高级【抽取复习】
  • 基于单片机的自动条幅悬挂机
  • Leetcode 06 java
  • SpringBoot的配置文件
  • 【micro:bit】从入门到放弃(四):高级指令:函数、数组、文本、高级LED、引脚配置
  • UE蒙太奇和动画序列有什么区别?
  • 早期SD模型控制生成方法
  • Dev-C++——winAPI贪吃蛇小游戏
  • 智能制造之物料详解
  • 物联网安装调试-温湿度传感器
  • 数学专业转行做大数据容易吗?需要补什么?
  • 高性能熔断限流实现:Spring Cloud Gateway 在电商系统的实战优化
  • 本地部署 Claude 大语言模型的完整实践指南
  • 从磁记录到数据中心:磁盘原理与服务器架构的完整技术链路
  • 【C++基础】面试高频考点解析:extern “C“ 的链接陷阱与真题实战
  • 【原创】微信小程序添加TDesign组件
  • 网络安全初级(前端页面的编写分析)
  • 手写tomcat
  • JAVA学习-练习试用Java实现“贝叶斯网络:实现一个简单的贝叶斯网络用于因果推理”
  • Transient Storage
  • Redis通用常见命令(含面试题)
  • [硬件电路-51]:晶体管既可以用于模拟电路芯片,也可以用于数字电路芯片,晶体管应用在这两个领域的相同点和本质区别?
  • Linux之dpkg--命令的用法
  • Apache基础配置
  • DOM型XSS破坏
  • gcc 和 g++ 的区别
  • Pycaita二次开发基础代码解析:材料属性管理与焊点坐标导出实战指南
  • Go实现用户登录小程序