数据清洗全流程总结

# 加载数据集
data(airquality)

# 查看数据集
str(airquality)
head(airquality)

查看NA

colSums(is.na(airquality))

去除NA

airquality_no_na <- na.omit(airquality)

再次check NA

colSums(is.na(airquality_no_na))

查看duplicates

duplicated_rows <- duplicated(airquality_no_na)
sum(duplicated_rows)

去除duplicates

airquality_no_dup <- unique(airquality_no_na)

查看typo(在这个例子中,数据集没有文本列,所以跳过这一步)用另外一个数据集举例子

# 加载数据集
data(mtcars)
mtcars
# 假设在"carb"列中,"4"被错误地输入为"4x"
mtcars$carb[c(1, 10)] <- "4x"

# 查看"carb"列的唯一值
unique(mtcars$carb)
# 查找包含"x"的行(假设"x"是一个typo标志)
grep("x", mtcars$carb)
# 将"4x"替换为"4"
mtcars$carb <- gsub("4x", "4", mtcars$carb)

# 再次查看"carb"列的唯一值,确认typo已被去除
unique(mtcars$carb)

检查数据类型和数据位置是否合理

有的时候,数据类型并不合适,比如分类变量我们通常采用factor的数据格式;而且有的时候,因变量在自变量的列前面,这个也不合适

teeth <- teeth %>%
mutate(dose = factor(dose, levels = c(0.5, 1, 2), ordered = T),
supp = as.factor(supp)) %>% relocate(supp, dose)
str(teeth)

进行长宽数据转换(如果有必要)

长数据转换

library(tidyr)
airquality_long <- gather(airquality_no_dup, key = "variable", value = "value", -Month, -Day)
  • airquality_no_dup:这是输入数据集,它应该是一个数据框(data frame)或类似的结构,其中包含多个列,这些列将被转换成长格式。

  • key:这是新数据集中用于存储原始列名的列名。在这个例子中,它被设置为 "variable"。

  • value:这是新数据集中用于存储原始列值的列名。在这个例子中,它被设置为 "value""。

-Month 和 -Day:这些是选择器,表示在转换过程中,Month 和 Day 这两列将保持不变,不被转换为长格式。- 前缀表示排除这些列。

宽数据转换

# 假设df是长格式的数据框
wide_data <- df %>%
  pivot_wider(names_from = column_to_spread, values_from = column_to_copy)
data_wide <- airquality_long %>%
  pivot_wider(names_from = variable,values_from = value)

再次查看数据集确认满足要求,清洗完成

str(airquality_long)
head(airquality_long)
head(data_wide)
posted @ 2024-05-23 11:44  chen生信  阅读(92)  评论(0)    收藏  举报