R 数据框
在 R 语言中,数据框(Data Frame)是一种二维表格结构,类似于 Excel 或数据库表,是 R 中最常用的数据结构之一,广泛用于数据分析和统计建模。结合 Visual Studio Code(VSCode)环境,以下是针对 Linux 系统用户的详细中文讲解,假设你已将 VSCode 设置为中文界面并配置了 R 语言支持(参考之前的“R 语言基础”讲解)。内容简洁清晰,适合初学者,涵盖数据框的定义、操作、在 VSCode 中的使用及常见问题。
R 数据框概述
- 功能:数据框用于存储异构数据,每列可以是不同类型(如数值、字符、因子),适合处理表格数据。
- 数据类型:数据框属于
data.frame
类型,类似列表但以表格形式组织。 - VSCode 集成:通过 R 扩展(如
REditorSupport.r
)支持语法高亮、补全和调试。 - 前提:
- R 已安装(运行
R --version
,安装方法见“R 语言基础”)。 - VSCode 配置了 R 扩展(ID:
REditorSupport.r
)和languageserver
包(install.packages("languageserver")
)。 - 项目目录已打开(参考“打开目录”讲解)。
R 数据框基础
1. 创建数据框
- 语法:使用
data.frame()
函数。
data.frame(列名1 = 数据1, 列名2 = 数据2, ...)
- 示例:
# 创建数据框
df <- data.frame(
name = c("Alice", "Bob", "Charlie"),
age = c(25, 30, 28),
score = c(85, 90, 95)
)
print(df)
- 输出:
name age score 1 Alice 25 85 2 Bob 30 90 3 Charlie 28 95
- 说明:每列是一个向量,列长度必须相等。
2. 查看数据框
- 基本查看:
print(df)
:显示整个数据框。head(df, n=2)
:显示前 2 行。str(df)
:显示结构。R str(df)
- 输出:
'data.frame': 3 obs. of 3 variables: $ name : chr "Alice" "Bob" "Charlie" $ age : num 25 30 28 $ score: num 85 90 95
- 输出:
- 统计摘要:
summary(df)
。
summary(df)
- 输出:
name age score Length:3 Min. :25.0 Min. :85.0 Class :character 1st Qu.:26.5 1st Qu.:87.5 Mode :character Median :28.0 Median :90.0 Mean :27.7 Mean :90.0 3rd Qu.:29.0 3rd Qu.:92.5 Max. :30.0 Max. :95.0
3. 访问数据框
- 按列:
- 使用
$
:df$name
。 - 使用
[[]]
:df[["name"]]
。 - 使用
[]
:df[, "name"]
。
print(df$name) # 输出: "Alice" "Bob" "Charlie"
- 按行:
df[1, ]
。
print(df[1, ]) # 输出: Alice 25 85
- 按行列:
df[1, "score"]
。
print(df[1, "score"]) # 输出: 85
4. 修改数据框
- 修改元素:
df$age[1] <- 26
print(df)
- 输出:
name age score 1 Alice 26 85 2 Bob 30 90 3 Charlie 28 95
- 添加列:
df$grade <- c("B", "A", "A")
print(df)
- 添加行:使用
rbind()
。
new_row <- data.frame(name="David", age=27, score=88, grade="B")
df <- rbind(df, new_row)
print(df)
- 删除列:
df$grade <- NULL
。 - 删除行:
df <- df[-1, ]
(删除第1行)。
5. 数据框操作
- 筛选:使用
subset()
或逻辑索引。
# 筛选 score >= 90
high_scores <- subset(df, score >= 90)
print(high_scores)
- 输出:
name age score grade 2 Bob 30 90 A 3 Charlie 28 95 A 4 David 27 88 B
- 排序:使用
order()
。
df <- df[order(df$score, decreasing=TRUE), ]
print(df)
- 输出:按 score 降序排列。
- 合并:使用
merge()
或cbind()
。
df2 <- data.frame(name=c("Alice", "Bob"), city=c("Beijing", "Shanghai"))
merged_df <- merge(df, df2, by="name")
print(merged_df)
在 VSCode 中使用数据框
- 创建 R 脚本:
- 新建
dataframe.R
(右键“文件资源管理器” -> “新建文件”)。 - 输入示例代码:
# 数据框示例 # 创建数据框 df <- data.frame( name = c("Alice", "Bob", "Charlie"), age = c(25, 30, 28), score = c(85, 90, 95) ) print(df) # 修改和访问 df$age[1] <- 26 df$grade <- factor(c("B", "A", "A")) print(df$name) # 输出: "Alice" "Bob" "Charlie" print(df) # 筛选和统计 high_scores <- subset(df, score >= 90) print(high_scores) print(summary(df))
- 运行代码:
- 选中代码,按
Ctrl+Enter
,结果显示在“R 终端”。 - 或运行整个文件:
bash Rscript dataframe.R
- 输出:
name age score 1 Alice 25 85 2 Bob 30 90 3 Charlie 28 95 [1] "Alice" "Bob" "Charlie" name age score grade 1 Alice 26 85 B 2 Bob 30 90 A 3 Charlie 28 95 A name age score grade 2 Bob 30 90 A 3 Charlie 28 95 A name age score grade Length:3 Min. :26.0 Min. :85.0 A:2 Class :character 1st Qu.:27.0 1st Qu.:87.5 B:1 Mode :character Median :28.0 Median :90.0 Mean :28.0 Mean :90.0 3rd Qu.:29.0 3rd Qu.:92.5 Max. :30.0 Max. :95.0
- 调试:
- 设置断点(行号左侧点击),按
F5
(需R Debugger
扩展和launch.json
配置,参考“运行和调试”)。 - 检查数据框结构和值(如
df$score
)。
结合 dplyr 包
dplyr
包提供高效的数据框操作。
- 安装:
install.packages("dplyr")
- 示例:
library(dplyr)
df <- df %>%
filter(score >= 90) %>%
mutate(status = "Excellent") %>%
arrange(desc(score))
print(df)
- 输出:
name age score grade status 1 Charlie 28 95 A Excellent 2 Bob 30 90 A Excellent
常见问题及解决方法
- 列类型错误:
- 确保列类型正确:
str(df)
检查。 - 转换类型:
df$age <- as.numeric(df$age)
。 - 中文乱码:
- 确保终端编码为 UTF-8(运行
locale
,设置为zh_CN.UTF-8
)。 - 在 VSCode 设置:
json "terminal.integrated.env.linux": { "LANG": "zh_CN.UTF-8" }
- 保存文件为 UTF-8(状态栏右下角选择编码)。
- 示例(中文数据框):
R df <- data.frame(姓名 = c("张伟", "李娜"), 年龄 = c(25, 30)) print(df)
- VSCode 不显示数据框:
- 确保安装 R 扩展和
languageserver
包。 - 使用
View(df)
在 VSCode 中显示交互式表格(需 R 扩展支持)。 - Linux 性能问题:
- 若卡顿,运行
code --disable-gpu
。 - 确保目录权限:
chmod -R u+rw ~/.config/Code
。
实用技巧
- 快捷键:
- 运行代码:
Ctrl+Enter
- 补全代码:
Ctrl+Space
(需languageserver
)。 - 注释:
Ctrl+/
。 - 推荐扩展:
- R:核心支持。
- languageserver:智能补全数据框操作。
- Better Comments:高亮数据框相关注释。
bash code --install-extension aaron-bond.better-comments
- AI 辅助:
- 使用 GitHub Copilot 或 DeepSeek(参考之前讲解),输入
# 创建 R 数据框并筛选
,生成代码。 - 高效操作:
- 使用
dplyr
简化操作:R df %>% group_by(grade) %>% summarise(mean_score = mean(score))
- 使用
tibble
包增强数据框显示:R install.packages("tibble") as_tibble(df)
示例:综合数据框脚本
- 新建
dataframe.R
:
# 数据框综合示例
# 创建数据框
df <- data.frame(
name = c("Alice", "Bob", "Charlie"),
age = c(25, 30, 28),
score = c(85, 90, 95)
)
print(df)
# 修改和添加
df$age[1] <- 26
df$grade <- factor(c("B", "A", "A"))
print(df)
# 筛选和排序
library(dplyr)
high_scores <- df %>% filter(score >= 90) %>% arrange(desc(score))
print(high_scores)
# 统计
print(summary(df))
- 运行:
- 选中代码,按
Ctrl+Enter
,查看“R 终端”输出:name age score 1 Alice 25 85 2 Bob 30 90 3 Charlie 28 95 name age score grade 1 Alice 26 85 B 2 Bob 30 90 A 3 Charlie 28 95 A name age score grade 1 Charlie 28 95 A 2 Bob 30 90 A name age score grade Length:3 Min. :26.0 Min. :85.0 A:2 Class :character 1st Qu.:27.0 1st Qu.:87.5 B:1 Mode :character Median :28.0 Median :90.0 Mean :28.0 Mean :90.0 3rd Qu.:29.0 3rd Qu.:92.5 Max. :30.0 Max. :95.0
- 或运行:
bash Rscript dataframe.R
如果需要深入讲解(如数据框与统计建模结合、dplyr
高级用法),或有其他问题,请告诉我你的 Linux 发行版、R 版本或具体需求!