从零开始学习R语言

目录

引言

环境搭建

安装R

安装RStudio

RStudio界面简介

基础语法

注释

数据类型与数据结构

原子向量

数据结构

基本运算符

算术运算符

比较运算符

逻辑运算符

常用函数

数据操作

数据导入

读取CSV文件

读取Excel文件

连接数据库

数据清洗

处理缺失值

数据类型转换

数据变换

安装并加载dplyr

常用函数

数据可视化

基础绘图

绘制散点图

绘制直方图

高级绘图:ggplot2

安装并加载ggplot2

基本用法

常用图形

自定义图形

统计分析

描述性统计

常用指标

计算众数的示例

推断性统计

t检验

卡方检验

方差分析(ANOVA)

回归分析

简单线性回归

多元线性回归

回归模型诊断

实践项目

案例一:数据探索性分析(EDA)

案例二:建立回归模型预测房价

扩展内容

创建Shiny应用

安装并加载Shiny

简单的Shiny应用示例

运行应用

[使用R Markdown生成报告](#使用R Markdown生成报告)

安装并加载rmarkdown

[创建R Markdown文件](#创建R Markdown文件)

编写内容

绘图


引言

R语言是一种用于统计分析、数据挖掘和数据可视化的开源编程语言和软件环境。自1993年由Ross Ihaka和Robert Gentleman开发以来,R语言凭借其强大的统计计算能力和丰富的可视化功能,已成为数据科学家和统计学家不可或缺的工具。

学习目标:

  • 理解R语言的基本语法和数据结构
  • 掌握数据导入、清洗和变换的方法
  • 能够使用R进行数据可视化和统计分析
  • 熟悉常用的R扩展包,提高数据处理效率
  • 通过实践项目巩固所学知识

环境搭建

安装R

R语言支持多种操作系统,包括Windows、macOS和Linux。

各操作系统安装步骤:

  • Windows:

    1. 访问R的CRAN镜像站点下载最新的Windows安装包。
    2. 运行安装程序,按照提示完成安装。
  • macOS:

    1. 访问CRAN的macOS页面下载适合您系统的安装包。
    2. 双击安装包,按照指引完成安装。
  • Linux:

    • 使用包管理器安装,如Ubuntu下执行: sudo apt-get update sudo apt-get install r-base

安装RStudio

RStudio是一款强大的R语言集成开发环境,提供了友好的用户界面和丰富的功能。

安装步骤:

  1. 访问RStudio官网下载适合您操作系统的安装包。
  2. 运行安装程序,按照提示完成安装。

RStudio界面简介

RStudio主要由以下几个区域组成:

  • 脚本编辑器:编写和编辑R脚本。
  • 控制台:直接输入R命令并立即执行。
  • 环境/历史:查看当前工作空间中的变量和命令历史。
  • 文件/图形/包/帮助:管理文件、查看绘图结果、安装和加载包、查看帮助文档。

基础语法

注释

  • 单行注释 :以#开头。

    # 这是一个单行注释

数据类型与数据结构

原子向量

R中的基本数据类型都是向量,分为以下几种:

数据类型 描述 示例
数值型 实数,例如整数和小数 x <- 42
整数型 整数,加后缀L表示 y <- 42L
字符型 文本字符串 name <- "Alice"
逻辑型 布尔值,TRUEFALSE flag <- TRUE
复数型 复数 z <- 1+2i
数据结构
数据结构 描述 示例
向量 同一类型的元素集合 v <- c(1, 2, 3)
因子 分类数据,存储为整数并有标签 f <- factor(c("男", "女", "男"))
列表 可包含不同类型元素的集合 lst <- list(name="Alice", age=25)
矩阵 二维的同类型元素集合 m <- matrix(1:6, nrow=2, ncol=3)
数据框 表格形式的数据集 df <- data.frame(id=1:3, score=c(85,90,95))
数组 多维的同类型元素集合 arr <- array(1:8, dim=c(2,2,2))

基本运算符

算术运算符
运算符 描述 示例
+ 加法 2 + 3
- 减法 5 - 2
* 乘法 2 * 3
/ 除法 6 / 2
^ 2 ^ 3
%% 取模 5 %% 2(结果为1)
%/% 整除 5 %/% 2(结果为2)
比较运算符
运算符 描述 示例
== 等于 x == y
!= 不等于 x != y
> 大于 x > y
< 小于 x < y
>= 大于等于 x >= y
<= 小于等于 x <= y
逻辑运算符
运算符 描述 示例
& 元素级与 x & y
` ` 元素级或
! !x
&& 短路与 x && y(仅检查第一个元素)
` `

常用函数

  • 赋值<-=

    复制代码
    R 复制代码
    x <- 10
    y = 20
  • 查看对象类型class()

    复制代码
    R 复制代码
    class(x)  # 输出 "numeric"
  • 求长度length()

    复制代码
    R 复制代码
    length(c(1, 2, 3))  # 输出 3
  • 删除对象rm()

    复制代码
    R 复制代码
    rm(x)  # 删除变量x

数据操作

数据导入

读取CSV文件
R 复制代码
data <- read.csv("data.csv", header=TRUE, sep=",")
读取Excel文件

需要先安装并加载readxl包:

复制代码
R 复制代码
install.packages("readxl")
library(readxl)
data <- read_excel("data.xlsx", sheet=1)
连接数据库

以连接MySQL为例:

复制代码
R 复制代码
install.packages("RMySQL")
library(RMySQL)
conn <- dbConnect(MySQL(), dbname="dbname", host="host", user="user", password="password")
data <- dbGetQuery(conn, "SELECT * FROM tablename")

数据清洗

处理缺失值
  • 检查缺失值is.na()

    复制代码
    sum(is.na(data))  # 统计缺失值数量
  • 删除缺失值na.omit()

    复制代码
    data_clean <- na.omit(data)
  • 填充缺失值

    复制代码
    data[is.na(data)] <- 0  # 将缺失值替换为0
数据类型转换
  • 转换为因子

    复制代码
    data$gender <- as.factor(data$gender)
  • 转换为数值型

    复制代码
    data$age <- as.numeric(data$age)

数据变换

使用dplyr包对数据进行操作。

安装并加载dplyr
复制代码
install.packages("dplyr")
library(dplyr)
常用函数
函数 描述 示例
filter() 筛选行 filter(data, age > 30)
select() 选择列 select(data, name, age)
arrange() 排序 arrange(data, desc(age))
mutate() 添加新列 mutate(data, age_group = ifelse(age > 30, "老年", "青年"))
summarise() 汇总 summarise(data, avg_age = mean(age))
group_by() 分组 data %>% group_by(gender) %>% summarise(count = n())

数据可视化

基础绘图

使用R的基础绘图系统进行简单的绘图。

绘制散点图
复制代码
plot(data$x, data$y, main="散点图", xlab="X轴", ylab="Y轴", col="blue")
绘制直方图
复制代码
hist(data$age, breaks=10, main="年龄分布直方图", xlab="年龄", col="green")

高级绘图:ggplot2

ggplot2是R中最流行的绘图包,基于语法层次的绘图理念。

安装并加载ggplot2
复制代码
install.packages("ggplot2")
library(ggplot2)
基本用法
复制代码
ggplot(data, aes(x=age, y=income)) + geom_point()
常用图形
图形类型 函数 示例
柱状图 geom_bar() ggplot(data, aes(x=gender)) + geom_bar()
折线图 geom_line() ggplot(data, aes(x=year, y=sales)) + geom_line()
箱线图 geom_boxplot() ggplot(data, aes(x=group, y=value)) + geom_boxplot()
密度图 geom_density() ggplot(data, aes(x=variable)) + geom_density()
自定义图形
  • 添加标题和标签

    复制代码
    ggplot(data, aes(x=age, y=income)) +
      geom_point() +
      ggtitle("年龄与收入关系图") +
      xlab("年龄") +
      ylab("收入")
  • 调整主题

    复制代码
    ggplot(data, aes(x=age, y=income)) +
      geom_point() +
      theme_minimal()

统计分析

描述性统计

常用指标
指标 函数 示例
均值 mean() mean(data$age)
中位数 median() median(data$income)
众数 自定义函数 见下方示例
方差 var() var(data$age)
标准差 sd() sd(data$income)
四分位数 quantile() quantile(data$age)
计算众数的示例
复制代码
get_mode <- function(v) {
  uniqv <- unique(v)
  uniqv[which.max(tabulate(match(v, uniqv)))]
}
mode_age <- get_mode(data$age)

推断性统计

t检验

用于比较两个样本均值是否有显著差异。

复制代码
t.test(data$score ~ data$group)
卡方检验

用于检验分类变量之间的独立性。

复制代码
chisq.test(table(data$gender, data$purchase))
方差分析(ANOVA)

用于比较多个组的均值差异。

复制代码
anova_result <- aov(score ~ group, data=data)
summary(anova_result)

回归分析

简单线性回归
复制代码
model <- lm(income ~ age, data=data)
summary(model)
多元线性回归
复制代码
model <- lm(income ~ age + education + experience, data=data)
summary(model)
回归模型诊断
复制代码
plot(model)

实践项目

案例一:数据探索性分析(EDA)

目标:

  • mtcars数据集进行探索性分析
  • 了解不同变量之间的关系
  • 可视化数据特征

步骤:

  1. 加载数据集

    复制代码
    data <- mtcars
  2. 查看数据结构

    复制代码
    str(data)
    summary(data)
  3. 计算描述性统计量

    复制代码
    mean_mpg <- mean(data$mpg)
    median_mpg <- median(data$mpg)
    sd_mpg <- sd(data$mpg)
  4. 绘制相关矩阵图

    复制代码
    pairs(data)
  5. 使用ggplot2绘制散点图

    复制代码
    ggplot(data, aes(x=wt, y=mpg)) +
      geom_point() +
      geom_smooth(method="lm") +
      ggtitle("汽车重量与油耗关系图") +
      xlab("重量") +
      ylab("每加仑英里数")

案例二:建立回归模型预测房价

数据集:

使用波士顿房价数据集(Boston),需要先安装并加载MASS包。

步骤:

  1. 加载数据集

    复制代码
    library(MASS)
    data <- Boston
  2. 查看数据结构

    复制代码
    str(data)
    summary(data)
  3. 分割训练集和测试集

    复制代码
    set.seed(123)
    index <- sample(1:nrow(data), 0.7 * nrow(data))
    train <- data[index, ]
    test <- data[-index, ]
  4. 建立线性回归模型

    复制代码
    model <- lm(medv ~ ., data=train)
    summary(model)
  5. 模型评估

    predictions <- predict(model, newdata=test)

    actuals <- test$medv

    mse <- mean((predictions - actuals)^2)

    print(paste("均方误差(MSE):", round(mse, 2)))

  6. 可视化结果

    复制代码
    plot(actuals, predictions,
         main="实际值 vs 预测值",
         xlab="实际房价",
         ylab="预测房价",
         pch=16, col="blue")
    abline(0, 1, col="red", lwd=2)

扩展内容

创建Shiny应用

Shiny是R中的一个包,用于构建交互式Web应用。

安装并加载Shiny
复制代码
install.packages("shiny")
library(shiny)
简单的Shiny应用示例
复制代码
# 保存为app.R
library(shiny)

ui <- fluidPage(
  titlePanel("Hello Shiny!"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "选择柱状图的分箱数:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),
    mainPanel(
      plotOutput("distPlot")
    )
  )
)

server <- function(input, output) {
  output$distPlot <- renderPlot({
    x <- faithful$eruptions
    bins <- seq(min(x), max(x), length.out = input$bins + 1)

    hist(x, breaks = bins, col = "darkgray", border = "white",
         xlab = "喷发持续时间(分钟)",
         main = "老忠实泉喷发持续时间直方图")
  })
}

shinyApp(ui = ui, server = server)
运行应用
复制代码
runApp("app.R")

使用R Markdown生成报告

R Markdown是一种基于Markdown的文档格式,支持嵌入R代码,自动生成报告。

安装并加载rmarkdown
复制代码
install.packages("rmarkdown")
library(rmarkdown)
创建R Markdown文件

在RStudio中,选择File -> New File -> R Markdown,按照提示创建。

编写内容
复制代码
---
title: "数据分析报告"
author: "Your Name"
date: "`r Sys.Date()`"
output: html_document
---

# 简介

这是一个使用R Markdown生成的报告示例。

# 数据加载

```{r}
data <- mtcars
summary(data)

绘图

复制代码
library(ggplot2)
ggplot(data, aes(x=wt, y=mpg)) + geom_point()
相关推荐
南宫生27 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
高山我梦口香糖43 分钟前
[react]searchParams转普通对象
开发语言·前端·javascript
sanguine__43 分钟前
Web APIs学习 (操作DOM BOM)
学习
信号处理学渣1 小时前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客1 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
jasmine s1 小时前
Pandas
开发语言·python
biomooc2 小时前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言
骇客野人2 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
black^sugar2 小时前
纯前端实现更新检测
开发语言·前端·javascript
404NooFound2 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql