Bootstrap

R语言学习笔记6-数据框

数据框(DataFrame)介绍

数据框是R语言中用于存储和处理表格数据的重要数据结构。由行和列组成,每列可以包含不同类型的数据,但同一列中的数据类型必须相同。数据框中的每一列都有一个列名,用于标识数据的内容

数据框用途

1. 数据清洗与预处理: 在数据分析过程中,数据常常需要进行清洗和预处理,包括缺失值处理、数据转换、重命名变量等操作。数据框提供了丰富的函数和方法来进行这些操作,使数据达到分析要求的格式和质量
2. 数据分析与统计: 数据框可以通过内置的函数和外部包(如dplyr、tidyverse等)进行各种统计计算、汇总、分组操作和复杂的数据逻辑处理。这些操作可以从数据中提取有用信息、进行趋势分析、建立模型等
3. 数据可视化: R语言中的数据可视化包(如ggplot2)可以直接接受数据框作为输入,通过简单的代码生成高质量的统计图表。使得可以快速理解数据的特征和趋势

创建数据框

可使用 data.frame() 函数直接创建数据框

# 创建一个基础的数据框
df <- data.frame(
  Column1 = c(1, 2, 3),
  Column2 = c("A", "B", "C"),
  Column3 = c(TRUE, FALSE, TRUE)
)

从矩阵创建数据框

对于一个矩阵,可以使用 as.data.frame() 函数将其转换为数据框

# 创建一个矩阵
mat <- matrix(1:6, nrow = 2)
# 将矩阵转换为数据框
df_from_mat <- as.data.frame(mat)

索引和切片

可使用列名或行号进行索引和切片操作

# 选择指定列
selected_columns <- df[, c("Column1", "Column2")]

# 选择指定行
selected_rows <- df[c(1, 3), ]

# 使用列名选择
column1_values <- df$Column1
column1_values_alt <- df["Column1"]

# 使用逻辑条件选择
filtered_data <- df[df$Column1 > 2, ]

添加和修改列

# 添加新列
df$NewColumn <- c(4, 5, 6)

# 修改列的值
df$Column1 <- c(7, 8, 9)

数据框的预处理

对数据框进行重命名、类型转换和变量重编码等操作

# 变量重命名
names(df)[3] <- "NewName"

# 修改变量类型
df$Column1 <- as.numeric(df$Column1)

# 变量重编码
df$Column2[df$Column2 == "A"] <- "X"
df$Column2[df$Column2 == "B"] <- "Y"

数据框的排序

使用 order() 函数对数据框进行排序

# 按照 Column1 列升序排序
df_sorted <- df[order(df$Column1), ]

数据框的合并与拆分

# 列拼接
combined_df <- cbind(df1, df2)

# 行拼接
combined_df <- rbind(df1, df2)

# 根据标志进行列合并
merged_df <- merge(df1, df2, by = "ID")

数据框的计算与汇总

# 计算某列的均值
mean_value <- mean(df$Column1)

# 分类汇总
summary_stats <- aggregate(df$Column1, by = list(df$Column2), mean)

数据框的筛选

# 条件筛选
subset_df <- subset(df, Column1 > 2)

处理缺失值

# 检查缺失值情况
missing_values <- is.na(df)

# 删除含有缺失值的观测
df_no_missing <- na.omit(df)

# 用指定数值填补缺失值
df$Column1[is.na(df$Column1)] <- 0

应用函数处理数据

使用 apply() 函数对数据框中的数据进行批量处理

# 使用 apply 函数计算某几列的均值
mean_values <- apply(df[, c("Column1", "Column2")], MARGIN = 2, mean)

重塑数据框

通过 reshape2 包中的函数如 melt() 和 dcast() 可以进行数据框的重塑操作,从长格式(long
format)到宽格式(wide format)的转换

library(reshape2)

# 将数据框从宽格式变为长格式
melted_df <- melt(df, id.vars = c("ID", "Date"))

# 将数据框从长格式变为宽格式
casted_df <- dcast(melted_df, ID ~ variable, value.var = "value")

使用 dplyr 进行数据框的管道操作

dplyr 包提供了一组功能强大的函数,用于数据框的快速操作,如选择、过滤、排序、汇总和变异等

library(dplyr)

# 选择和筛选
selected_df <- df %>%
  select(Column1, Column2) %>%
  filter(Column1 > 2)

# 分组和汇总
summary_df <- df %>%
  group_by(Column2) %>%
  summarize(mean_value = mean(Column1))

数据框的时间序列操作

对于时间序列数据,可以使用 zoo 或 xts 包来扩展数据框以支持时间索引和时间序列操作

library(zoo)

# 创建时间序列数据框
dates <- as.Date(c("2023-01-01", "2023-01-02", "2023-01-03"))
ts_data <- zoo(df[, "Column1"], order.by = dates)

大数据框的处理

对于大数据集,可以使用 data.table 包来进行快速的数据框操作,特别是对于大量数据的高效处理和计算

library(data.table)

# 将数据框转换为 data.table
dt <- as.data.table(df)

# 使用 data.table 的快速操作
result <- dt[Column1 > 2, .(mean_value = mean(Column2)), by = Column3]

数据框的绘图

可使用 ggplot2 包将数据框中的数据可视化,创建高质量的统计图形

library(ggplot2)

# 创建散点图
ggplot(df, aes(x = Column1, y = Column2)) +
  geom_point() +
  labs(title = "Scatter Plot", x = "Column1", y = "Column2")

数据框的文本处理

使用 stringr 或 tm 包进行数据框中文本数据的处理,如正则表达式匹配、文本清洗和词频统计等

library(stringr)

# 使用 stringr 包处理文本列
df$TextColumn_cleaned <- str_replace_all(df$TextColumn, "[^[:alnum:][:space:]]", "")

数据框的连接与关联

按行或列连接数据框

# 按行连接(合并)
combined_rows <- rbind(df1, df2)

# 按列连接(合并)
combined_columns <- cbind(df1, df2)

按键值关联数据框

# 根据共同的列(键)进行合并
merged_df <- merge(df1, df2, by = "key_column")

# 使用 dplyr 包进行关联(左连接示例)
library(dplyr)
merged_df <- left_join(df1, df2, by = "key_column")

数据框的条件处理与逻辑操作

条件筛选

# 根据条件筛选数据
subset_df <- subset(df, Column1 > 2 & Column2 == "A")

# 使用 dplyr 进行筛选
filtered_df <- df %>%
  filter(Column1 > 2, Column2 == "A")

逻辑操作

# 创建逻辑向量
logic_vector <- df$Column1 > 2

# 使用逻辑向量选择数据
selected_df <- df[logic_vector, ]

数据框的汇总与统计分析

分组汇总

# 按照列进行分组,并计算每组的均值
summary_stats <- aggregate(df$Value, by = list(df$Category), FUN = mean)

# 使用 dplyr 进行分组和汇总
summary_df <- df %>%
  group_by(Category) %>%
  summarize(mean_value = mean(Value))

统计计算

# 计算某列的均值
mean_value <- mean(df$Value)

# 计算标准差
std_deviation <- sd(df$Value)

# 计算频数统计
freq_table <- table(df$Category)
;