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 中使用数据框

  1. 创建 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))
  1. 运行代码
  • 选中代码,按 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
  1. 调试
  • 设置断点(行号左侧点击),按 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)

示例:综合数据框脚本

  1. 新建 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))
  1. 运行:
  • 选中代码,按 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 版本或具体需求!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注