数据框(DataFrame)介绍

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

数据框用途

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

创建数据框

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

从矩阵创建数据框

# 创建一个矩阵
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"

数据框的排序

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

数据框的筛选

# 条件筛选
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 函数计算某几列的均值
mean_values <- apply(df[, c("Column1", "Column2")], MARGIN = 2, mean)

重塑数据框

library(reshape2)

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

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

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

library(dplyr)

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

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

数据框的时间序列操作

library(zoo)

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

大数据框的处理

library(data.table)

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

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

数据框的绘图

library(ggplot2)

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

数据框的文本处理

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)
07-16 19:13