R 语言数据整理全攻略:从导入到转换的实战指南

目录

一、数据导入与导出:快速读写数据

1. 基础包数据读写:read.table与write.table

2. 高效数据读取:data.table::fread

3. Excel 文件读取:readxl包

4. 批量读取文件:list.files

二、数据清洗:筛选、转换与分组

1. 数据框操作:dplyr包核心函数

2. 分组汇总:group_by与summarise

3. 管道操作:%>%简化代码

三、数据合并:多表连接与整合

1. 数据框连接:dplyr连接函数

2. 列合并与行合并

四、数据重塑:列拆分、合并与长宽转换

1. 列拆分与合并:tidyr包

2. 长宽数据转换:pivot_longer与pivot_wider

五、冲突管理与包依赖

1. 函数冲突解决:conflicted包

2. 常用包依赖关系

六、实战建议


一、数据导入与导出:快速读写数据

1. 基础包数据读写:read.tablewrite.table

install.packages("tidyverse")
library(tidyverse)

# CSV文件导入(交互式选择文件)
rawdata <- read.table(file.choose(), header = TRUE, sep = ",") 
# header=TRUE: 将首行作为列名
# sep=",": 分隔符为逗号(适用于CSV格式)

# 查看数据前4行
head(rawdata, n=4)  
# 查看数据后10行
tail(rawdata, n=10)  
# 提取95-100行
rawdata[95:100, ]    
# 查看数据结构
str(rawdata)         

# 数据导出为CSV(不保留行号)
write.table(rawdata, "test.csv", sep = ",", row.names = FALSE)

2. 高效数据读取:data.table::fread

# 安装data.table包(读取速度比read.table快10-100倍)
install.packages("data.table")
library(data.table)

# 快速读取CSV
rawdata_fast <- fread(file.choose()) 

3. Excel 文件读取:readxl

install.packages("readxl")
library(readxl)

# 交互式读取Excel文件(支持.xlsx/.xls)
exc <- read_excel(file.choose()) 

4. 批量读取文件:list.files

# 获取当前目录下所有CSV文件
files <- list.files(path = "./data", pattern = ".csv$", full.names = TRUE) 
# path: 指定目录路径
# pattern: 正则表达式筛选文件(如".csv$"表示以.csv结尾)
# full.names: 返回完整路径

# 批量读取并合并
all_data <- lapply(files, read.csv) %>% bind_rows()

 

二、数据清洗:筛选、转换与分组

1. 数据框操作:dplyr包核心函数

install.packages("dplyr")
library(dplyr)

# 示例数据集:ToothGrowth(豚鼠牙齿生长数据)
data(ToothGrowth)
head(ToothGrowth)

# 1. 新增变量与变量转换
tooth2 <- mutate(ToothGrowth,
                 Ten = len^2,          # 平方值
                 nv = 1:nrow(ToothGrowth), # 行号
                 nv2 = ifelse(nv > median(nv), "H", "L") # 中位数分组
)

# 2. 筛选行(filter)
tooth3 <- filter(tooth2, 
                 nv %in% 1:50,       # nv在1-50之间
                 nv2 == "H"          # 分组为H
)

# 3. 筛选列(select)
tooth4 <- select(tooth3, supp, dose) # 选择supp和dose列
tooth4 <- select(tooth3, 2:4)        # 选择第2-4列

2. 分组汇总:group_bysummarise

# 全局汇总
summarise(ToothGrowth, 
          len_max = max(len),    # 最大值
          len_min = min(len)     # 最小值
)

# 按supp分组汇总
ToothGrowth %>% 
  group_by(supp) %>%        # 按supp分组
  summarise(len_mean = mean(len)) # 计算每组均值

# 多变量分组(dose+supp)
ToothGrowth %>% 
  group_by(dose, supp) %>% 
  summarise(
    len_max = max(len),
    n = n()  # 计数
  )

3. 管道操作:%>%简化代码

# 传统写法
step1 <- filter(ToothGrowth, dose > 0.5)
step2 <- group_by(step1, supp)
step3 <- summarise(step2, mean_len = mean(len))

# 管道写法(更简洁)
result <- ToothGrowth %>% 
  filter(dose > 0.5) %>% 
  group_by(supp) %>% 
  summarise(mean_len = mean(len))

 

三、数据合并:多表连接与整合

1. 数据框连接:dplyr连接函数

# 创建示例数据框
df1 <- data.frame(c1 = 2:5, c2 = letters[2:5])  # c2: b,c,d,e
df2 <- data.frame(c3 = c("b", "c", "t", "u", "v", "w"), 
                  c4 = sample(1:100, 6))

# 1. 左连接(保留左表所有行)
df1 %>% left_join(df2, by = c("c2" = "c3")) 
# by: 指定连接键(左表列=右表列)

# 2. 右连接(保留右表所有行)
df1 %>% right_join(df2, by = "c2") 

# 3. 内连接(仅保留匹配行)
df1 %>% inner_join(df2, by = "c2") 

# 4. 全连接(保留所有行,缺失值填NA)
df1 %>% full_join(df2, by = "c2") 

2. 列合并与行合并

# 列合并(按行对齐,需行数相同)
cbind(df1, df2) 

# 行合并(按列对齐,需列名相同)
rbind(df1, df1) 

 

四、数据重塑:列拆分、合并与长宽转换

1. 列拆分与合并:tidyr

install.packages("tidyr")
library(tidyr)

# 示例数据框
df1 <- data.frame(
  c1 = c("a-1", "b-2", "c-3"),
  c2 = c("d.4", "e.5", "f.6")
)

# 1. 列拆分(separate)
df2 <- df1 %>% 
  separate(col = c1, sep = "-", into = c("char", "num")) %>%  # 按-拆分
  separate(col = c2, sep = "\\.", into = c("letter", "number"))  # 按.拆分

# 2. 列合并(unite)
df2 %>% 
  unite(col = "combined", char, letter, sep = "_") %>%  # 合并为combined列
  unite(col = "all", num, number, sep = "")  # 合并为all列(无分隔符)

2. 长宽数据转换:pivot_longerpivot_wider

# 示例宽数据
df_wide <- data.frame(
  id = 1:2,
  week1 = c(80, 90),
  week2 = c(85, 95)
)

# 宽转长(收集列)
df_long <- df_wide %>% 
  pivot_longer(cols = -id,           # 排除id列
               names_to = "week",     # 列名转为week列
               values_to = "score")   # 数值转为score列

# 长转宽(展开列)
df_long %>% 
  pivot_wider(names_from = week,     # week值作为列名
              values_from = score)   # score值填充列

 

五、冲突管理与包依赖

1. 函数冲突解决:conflicted

install.packages("conflicted")
library(conflicted)

# 解决dplyr与stats的filter冲突
conflict_prefer("filter", "dplyr") 

2. 常用包依赖关系

功能核心包主要函数 / 用途
数据导入base/tidyverseread.table/fread/read_excel
数据清洗dplyrfilter/select/mutate/group_by
数据重塑tidyrseparate/unite/pivot_longer/pivot_wider
数据合并dplyrleft_join/inner_join 等
管道操作magrittr%>%
冲突管理conflictedconflict_prefer

 

六、实战建议

  1. 数据导入最佳实践
    • 大文件优先用data.table::fread
    • 多文件批量处理用list.files+lapply
  2. 管道操作原则:每个管道步骤只做一件事(筛选→分组→汇总)
  3. 长宽转换场景
    • 宽转长:用于机器学习输入(特征列统一)
    • 长转宽:用于报表展示(指标横向对比)

通过掌握这些数据整理技巧,可大幅提升 R 语言数据处理效率,为后续分析建模奠定坚实基础!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值