大数跨境
0
0

科研代码R语言第10期 | 数据转换避免R语言的乱码问题

科研代码R语言第10期 | 数据转换避免R语言的乱码问题 科研代码
2025-11-03
5
导读:你看,又急!

1、前言

很多刚开始学R语言的人,都会急着去画图、跑回归或做显著性分析。可一旦真正处理实验数据、问卷结果或Excel表格时,就会发现——卡住的地方几乎都不是模型,而是数据结构。 数字列被识别成字符,分组变量忘了转因子,Excel导入后出现乱码、NA、重复值……这些看似微小的问题,往往导致整个分析流程无法进行。 今天这篇文章,就带大家系统了解R语言中最常见的数据清洗方法,学会如何识别、转换、修复错误类型,让原始数据变得可分析、可复现、可建模。

2、什么是数据清洗

在科研分析中,数据清洗的目标只有一个:让数据结构合理,类型正确,格式统一。 我们先用R自带的 iris 数据集来观察结构。

data <- iris
str(data)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

这是理想状态——四列数值、一列因子,非常标准。 但如果从Excel导入一个原始表格,就可能变成这样:

data <- read.csv("iris_dirty.csv")
str(data)

输出:

$ Sepal.Length: chr "5.1""4.9""4.7"
$ Sepal.Width : chr "3.5""3""3.2"
$ Species     : chr "setosa""versicolor""virginica"

看似相同的数据,其实全变成了字符串。R无法直接计算或建模。

3、类型转换:as.numeric()、as.factor()、as.character()

来到今天新内容的重点了,类型转换是R数据清洗的第一步。

data$Sepal.Length <- as.numeric(data$Sepal.Length)
data$Species <- as.factor(data$Species)

然后查看结构:

str(data)

转换完成后,数据就能直接用于计算或可视化。

常用函数:

  • as.numeric()
    将字符转为数值
  • as.factor()
    将字符转为因子(分类变量)
  • as.character()
    将因子转回字符

4、处理缺失值:na.omit()、is.na()、replace_na()

缺失值在科研数据中非常常见。 我们可以先人为制造缺失来演示处理方法:

data$Sepal.Width[c(3815)] <- NA

查看缺失数量:

sum(is.na(data$Sepal.Width))
## [1] 3

删除含有缺失值的行:

clean_data <- na.omit(data)

5、用dplyr清洗数据:filter()、mutate()、select()

dplyr 是R最常用的数据操作包,代码简洁可读。

library(dplyr)

clean_data <- data %>%
  filter(Sepal.Length > 5) %>%                    # 筛选行
  mutate(Ratio = Petal.Length / Petal.Width) %>%  # 创建新变量
  select(Species, Ratio, everything())            # 调整列顺序

head(clean_data)
##   Species Ratio Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1  setosa  7.00          5.1         3.5          1.4         0.2
## 2  setosa  4.25          5.4         3.9          1.7         0.4
## 3  setosa  7.50          5.4         3.7          1.5         0.2
## 4  setosa  6.00          5.8          NA          1.2         0.2
## 5  setosa  3.75          5.7         4.4          1.5         0.4
## 6  setosa  3.25          5.4         3.9          1.3         0.4

6、数据重塑:从宽到长(pivot_longer)

在统计绘图中,长格式数据通常更方便分析。 例如将每列特征整合为两列:变量名和值。

library(tidyr)

long_data <- iris %>%
  pivot_longer(cols = 1:4, names_to = "Variable", values_to = "Value")

head(long_data)
## # A tibble: 6 × 3
##   Species Variable     Value
##   <fct>   <chr>        <dbl>
## 1 setosa  Sepal.Length   5.1
## 2 setosa  Sepal.Width    3.5
## 3 setosa  Petal.Length   1.4
## 4 setosa  Petal.Width    0.2
## 5 setosa  Sepal.Length   4.9
## 6 setosa  Sepal.Width    3

这样转换后,就可以轻松用 ggplot2 做出多组变量的比较图。

7、小结

结构正确、类型统一,是顺利数据分析的前提。 希望今天的更新可以起到抛砖引玉的作用,让你可以针对性地修复数据问题,显著降低学习成本,让你更快进入真正的科研分析阶段。

感谢关注,你的支持是我不懈的动力

【声明】内容源于网络
0
0
科研代码
专注AI,R语言和Python的实用代码!
内容 505
粉丝 0
科研代码 专注AI,R语言和Python的实用代码!
总阅读181
粉丝0
内容505