diff --git a/.source_state b/.source_state index 40b9bd3..21bcd26 100644 --- a/.source_state +++ b/.source_state @@ -1 +1 @@ -e3299495debd6fd0a690dbec467177d1 +76e710570cc7049d88ae69e6b9e182d9 diff --git a/SD/0_R实践课程/index.html b/SD/0_R实践课程/index.html new file mode 100644 index 0000000..85767e4 --- /dev/null +++ b/SD/0_R实践课程/index.html @@ -0,0 +1,903 @@ + + + + + + + + + + + + + + Version: {{< var branch >}} – 〇、R语言实践前篇 + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

〇、R语言实践前篇

+

《区域水环境污染数据分析实践》
Data analysis practice of regional water environment pollution

+ +
+
+
+苏命、王为东
中国科学院大学资源与环境学院
中国科学院生态环境研究中心 +
+
+
+ +

2025-03-19

+
+
+

R语言实践部分课程简介

+

接下来的课程由我来带着大家一起学习、实践基于R语言的数据分析。

+

自我介绍

+
    +
  • 苏命:来自中国科学院生态环境研究中心
  • +
  • 主要从事水源水质水生态方面的研究
  • +
+

课件

+ +
+
+

如何学习接下来的内容?

+
    +
  • 上课形式: +
      +
    • 实践操作为主,目的是让每一位同学都能独立开展基于R的数据分析
    • +
    • 2-3人一组,自由分组,相互帮助
    • +
  • +
  • 准备工作: +
      +
    • 个人笔记本电脑,Microsoft Windows、GNU/Linux、MacOS系统
    • +
    • 安装好Microsoft Excel
    • +
    • 能联网
    • +
    • 如果电池不够用,建议带上插座
    • +
  • +
  • 上课规则 +
      +
    • 可随时打断,不懂就问
    • +
    • 无特殊情况不迟到,否则操作过程容易跟不上
    • +
  • +
+
+
+

Rstudio Server使用

+
    +
  • 服务网址:https://rs1.drwater.net/
  • +
  • 每位同学使用1个账号,随机生成
  • +
  • 密码:****
  • +
  • 后面的实践课程可在该服务器上完成
  • +
+
+
+

请记住自己的账号!

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
uid姓名
ruser01XX
ruser02XX
ruser03XX
ruser04XX
ruser05XX
ruser06XX
ruser07XX
ruser08XX
ruser09XX
ruser10XX
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
uid姓名
ruser11XX
ruser12XX
ruser13XX
ruser14XX
ruser15XX
ruser16XX
ruser17XX
ruser18XX
ruser19XX
ruser20XX
+
+
+
+
+
+

请记住自己的账号!

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
uid姓名
ruser21XX
ruser22XX
ruser23XX
ruser24XX
ruser25XX
ruser26XX
ruser27XX
ruser28XX
ruser29XX
ruser30XX
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
uid姓名
ruser31XX
ruser32XX
ruser33XX
ruser34XX
ruser35XX
+
+
+
+
+
+

课后作业

+

提交形式:第*次作业_姓名.qmd文件

+

模板:

+
---
+title: "课后作业*"
+author: 姓名
+---
+
+
+# 第1题
+
+说明
+
+::: {.cell}
+
+```{.r .cell-code}
+# Here is the code
+```
+:::
+
+# 第2题
+
+说明
+
+::: {.cell}
+
+```{.r .cell-code}
+# Here is the code
+```
+:::
+
+
+
+
+

欢迎讨论!

+ 苏命|https://drwater.net; https://drwater.net/team/ming-su/; Slides

+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SD/1.1_R语言介绍/index.html b/SD/1.1_R语言介绍/index.html new file mode 100644 index 0000000..89d8ff5 --- /dev/null +++ b/SD/1.1_R语言介绍/index.html @@ -0,0 +1,861 @@ + + + + + + + + + + + + + + Version: {{< var branch >}} – 一、R语言介绍 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

一、R语言介绍

+

《区域水环境污染数据分析实践》
Data analysis practice of regional water environment pollution

+ +
+
+
+苏命、王为东
中国科学院大学资源与环境学院
中国科学院生态环境研究中心 +
+
+
+ +

2025-03-19

+
+
+

R的历史

+
+
+
    +
  • 1976年: +
      +
    • 前身是S语言,由贝尔实验室John Chambers及其同事开发
    • +
  • +
  • 1993年: +
      +
    • R语言由Ross Ihaka和Robert Gentleman在奥克兰大学开发
    • +
    • R的诞生是为了提供一个强大的统计计算和图形显示的平台
    • +
  • +
+
+

+
+
    +
  • 1995年:R发布第一个公开版本
  • +
  • 2000年代: R语言逐渐成为统计学和数据科学领域重要工具
  • +
  • 2010年:Hadley Wickham发布了ggplot2包,数据可视化方面更强
  • +
  • 2016年:创建CRAN(Comprehensive R Archive Network),R包中央库
  • +
  • 至今 +
      +
    • R语言已成为数据科学和统计学领域最受欢迎的工具之一,被广泛用于数据分析、机器学习、数据可视化等领域
    • +
  • +
+
+
+

R的特点

+

一般特点

+
    +
  • 免费、开源、支持各个主要计算机系统。
  • +
  • 完整的程序设计语言,基于函数和对象。
  • +
  • 支持完善的数据类型,如向量、矩阵、数据框等。
  • +
+

技术特点

+
    +
  • 所有存在都是对象。
  • +
  • 所有动作都是函数调用。
  • +
  • 支持函数编程和对象类。
  • +
  • 是动态类型语言,运行速度相对较慢。
  • +
+
+
+

R的参考资料

+

推荐参考书

+ +
+
+

R的参考资料

+

中文参考书

+
    +
  • 《R语言编程艺术》
  • +
  • 《R语言实战》
  • +
  • 《R语言教程与实践》
  • +
  • 《R语言数据可视化实战》
  • +
  • 《R语言从入门到精通》
  • +
+
+
+

R的下载与安装

+

R的下载与安装

+ + +
+
+

RStudio

+

什么是RStudio?

+
    +
  • RStudio官方网站: https://posit.co/products/open-source/rstudio/
  • +
  • RStudio是一个集成开发环境(IDE),专门用于R语言编程和数据分析。
  • +
  • 它提供了一个直观的界面,使得编写、调试和运行R代码变得更加容易。
  • +
+
+
+

RStudio

+

RStudio的功能

+
    +
  1. 代码编辑器:提供了语法高亮、自动补全和代码折叠等功能。
  2. +
  3. 控制台:用于直接执行R代码并查看结果。
  4. +
  5. 环境和历史记录:可以查看当前加载的数据、函数和变量,以及之前执行过的命令。
  6. +
  7. 图形和可视化:RStudio内置了绘图设备,可以方便地创建各种统计图表。
  8. +
  9. 文件管理器:可直接在RStudio中管理文件和项目。
  10. +
  11. 包管理器:方便地安装、更新和管理R包。
  12. +
  13. Markdown编辑器:支持Markdown格式,可以创建美观的文档和报告。
  14. +
+
+
+

如何获取RStudio?

+
    +
  • RStudio可以从官方网站免费下载并安装:RStudio官网
  • +
  • RStudio是一个强大的R编程环境,为R用户提供了丰富的功能和工具。
  • +
  • 它简化了R语言的使用,提高了数据分析和可视化的效率。
  • +
+ +
+
+

扩展包:R package

+
    +
  • R有一万多个扩展软件包,提供了各种各样的功能
  • +
  • 已安装的基本R包,如base, stats, graphics等,启动R时默认载入
  • +
  • 其它扩展包需要用library(.)函数载入运行;或者采用dplyr::filter(.)方式
  • +
+
+ +
+
+
+
# load a R package
+library(ggplot2)
+
+# plot it based on the functions from `ggplot2` package
+mtcars |>
+  dplyr::filter(cyl != 8) |>
+  ggplot(aes(hp, mpg, color = am)) +
+  geom_point() +
+  geom_smooth(formula = y ~ x, method = "loess")
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+

安装R包

+
    +
  • 以安装sos包为例。
  • +
  • 在RStudio中调用“Tools”菜单的“Install Packages”,输入或选择sos即可安装。
  • +
  • R图形界面安装
  • +
  • 如果不用RStudio, 在R图形界面选菜单“程序包-安装程序包”进行安装。
  • +
  • 在CRAN镜像选择窗口中选择中国的镜像,如“China (Beijing 2)”,然后选择要安装的扩展软件包名称即可完成下载和安装。
  • +
  • 程序安装
  • +
+
# 指定镜像网站并安装扩展包
+options(repos=c(CRAN="https://mirror.tuna.tsinghua.edu.cn/CRAN/"))
+install.packages("sos")
+
+# 当R包不是CRAN标准包,代码放在[github](https://github.com)
+if (!require(devtools)) install.packages('devtools')
+devtools::install_github("kjhealy/socviz")
+
+
+

安装R包

+ +
+
+

结语

+
    +
  • R语言是一种强大的统计计算和数据分析工具,适用于各种领域。
  • +
  • 通过学习R语言,可以进行数据处理、统计分析和数据可视化。
  • +
+
+
+

欢迎讨论!

+ 苏命|https://drwater.net; https://drwater.net/team/ming-su/; Slides

+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SD/1.2_R语言语法基础/index.html b/SD/1.2_R语言语法基础/index.html new file mode 100644 index 0000000..106a023 --- /dev/null +++ b/SD/1.2_R语言语法基础/index.html @@ -0,0 +1,1806 @@ + + + + + + + + + + + + + + Version: {{< var branch >}} – 二、R语言语法基础 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

二、R语言语法基础

+

《区域水环境污染数据分析实践》
Data analysis practice of regional water environment pollution

+ +
+
+
+苏命、王为东
中国科学院大学资源与环境学院
中国科学院生态环境研究中心 +
+
+
+ +

2025-03-19

+
+
+

数据类型

+

数值型

+

R中的数值型数据可以是整数或浮点数。

+
+
(x <- 10)
+
+
[1] 10
+
+
(y <- 1.23e-2)
+
+
[1] 0.0123
+
+
(z <- pi)
+
+
[1] 3.141593
+
+
+
+
+

数据类型

+

字符串

+
    +
  • R 中的字符串用引号括起来,建议用双引号
  • +
  • 中文编码主要有GBK编码和UTF-8编码, 可能遇到编码错误造成乱码。RStudio软件默认采用UTF-8编码,在R程序运行时字符串一般用UTF-8编码保存。
  • +
+
+
(str <- "Hello, World!")
+
+
[1] "Hello, World!"
+
+
(str <- 'Hello, World!')
+
+
[1] "Hello, World!"
+
+
(str <- 'He was very angry, and shouted: "Stop!"')
+
+
[1] "He was very angry, and shouted: \"Stop!\""
+
+
+
+
+

数据类型

+

逻辑

+
+
c(TRUE, FALSE)
+
+
[1]  TRUE FALSE
+
+
+
+
+

特殊值

+
+
+
    +
  • NA: 这是最常见的NA类型,表示缺失值
  • +
  • NA_integer_: 这是NA的整数类型
  • +
  • NA_real_: 这是NA的实数类型
  • +
  • NA_character_: 这是NA的字符类型
  • +
  • NA_complex_: 这是NA的复数类型
  • +
+
+ +
+
+
pi
+
+
[1] 3.141593
+
+
NA
+
+
[1] NA
+
+
NA_character_
+
+
[1] NA
+
+
Inf
+
+
[1] Inf
+
+
+
+
+
+

特殊值

+

在 R 中,Inf 代表正无穷大(positive infinity),而 -Inf 则代表负无穷大(negative infinity)。这些值通常出现在数学计算中,例如除以零或对负数取对数等操作可能会导致无穷大的结果。

+
+
# 正无穷大
+(x <- Inf)
+
+
[1] Inf
+
+
# 负无穷大
+(y <- -Inf)
+
+
[1] -Inf
+
+
# 无穷大的运算
+(a <- 5 / 0)
+
+
[1] Inf
+
+
(b <- log(0))
+
+
[1] -Inf
+
+
+
+
+

变量赋值

+

在 R 中,可以使用 <-= 运算符将值赋给变量,建议用<-

+
+
# 使用 `<-` 运算符
+(x <- 10)
+
+
[1] 10
+
+
(y <- "hello")
+
+
[1] "hello"
+
+
# 使用 `=` 运算符
+(z = c(1, 2, 3))
+
+
[1] 1 2 3
+
+
+
+
+

变量赋值

+
+
# 向量赋值
+(vec <- c(1, 2, 3, 4, 5))
+
+
[1] 1 2 3 4 5
+
+
# 矩阵赋值
+(mat <- matrix(1:9, nrow = 3))
+
+
     [,1] [,2] [,3]
+[1,]    1    4    7
+[2,]    2    5    8
+[3,]    3    6    9
+
+
+
+
+

变量赋值

+

数据框赋值

+
+
(df <- data.frame(
+  Name = c("Alice", "Bob", "Charlie"),
+  Age = c(25, 30, 35),
+  Married = c(TRUE, FALSE, TRUE)
+))
+
+
     Name Age Married
+1   Alice  25    TRUE
+2     Bob  30   FALSE
+3 Charlie  35    TRUE
+
+
+
+
+

变量赋值

+

列表赋值

+
+
(lst <- list(
+  numbers = c(1, 2, 3),
+  strings = c("a", "b", "c"),
+  matrix = matrix(1:9, nrow = 3)
+))
+
+
$numbers
+[1] 1 2 3
+
+$strings
+[1] "a" "b" "c"
+
+$matrix
+     [,1] [,2] [,3]
+[1,]    1    4    7
+[2,]    2    5    8
+[3,]    3    6    9
+
+
+
+
+

数学函数

+
+
round(pi, digits = 3)
+
+
[1] 3.142
+
+
log(10)
+
+
[1] 2.302585
+
+
+
    +
  1. abs(x): 返回 x 的绝对值
  2. +
  3. sqrt(x): 返回 x 的平方根
  4. +
  5. exp(x): 以e为底的指数函数值
  6. +
  7. log(x, base): 以指定底数的对数函数的值,默认底数为e
  8. +
  9. log10(x): 10为底的对数值
  10. +
  11. log2(x): 2为底的对数值
  12. +
  13. floor(x): 不大于x的最大整数
  14. +
  15. ceiling(x): 不小于x的最小整数
  16. +
+
+
+

数学函数

+
    +
  1. sin(x), cos(x), tan(x): 返回 x 的正弦、余弦和正切值,其中 x 为弧度
  2. +
  3. asin(x), acos(x), atan(x): x 的反正弦、反余弦和反正切值,返回弧度
  4. +
  5. sinh(x), cosh(x), tanh(x): 返回 x 的双曲正弦、双曲余弦和双曲正切值
  6. +
  7. asinh(x), acosh(x), atanh(x): 反双曲正弦、反双曲余弦和反双曲正切值
  8. +
  9. round(x, digits): x 四舍五入,digits指定小数点后位数
  10. +
  11. trunc(x): 返回x截断值,即去掉小数部分
  12. +
  13. sign(x): 返回符号
  14. +
+
+
+

统计函数

+
+
x <- c(5, 10, 15, 20, 25)
+# 计算向量的平均值
+mean(x)
+
+
[1] 15
+
+
# 计算向量的中位数
+median(x)
+
+
[1] 15
+
+
# 计算向量的最小值
+min(x)
+
+
[1] 5
+
+
# 计算向量的最大值
+max(x)
+
+
[1] 25
+
+
# 计算向量的总和
+sum(x)
+
+
[1] 75
+
+
+
+
+

统计函数

+
+
# 计算向量的标准差
+sd(x)
+
+
[1] 7.905694
+
+
# 计算向量的方差
+var(x)
+
+
[1] 62.5
+
+
# 计算向量的分位数
+quantile(x, probs = c(0.25, 0.5, 0.75))
+
+
25% 50% 75% 
+ 10  15  20 
+
+
# 统计向量的频数
+(frequency <- table(x))
+
+
x
+ 5 10 15 20 25 
+ 1  1  1  1  1 
+
+
+
+
+

统计函数

+

执行两样本或单样本 t 检验

+
+
y <- c(3, 8, 13, 18, 23)
+t.test(x, y)
+
+

+    Welch Two Sample t-test
+
+data:  x and y
+t = 0.4, df = 8, p-value = 0.6996
+alternative hypothesis: true difference in means is not equal to 0
+95 percent confidence interval:
+ -9.530021 13.530021
+sample estimates:
+mean of x mean of y 
+       15        13 
+
+
+
+
+

统计函数

+

Wilcoxon-Mann-Whitney检验

+
+
wilcox.test(x, y)
+
+

+    Wilcoxon rank sum exact test
+
+data:  x and y
+W = 15, p-value = 0.6905
+alternative hypothesis: true location shift is not equal to 0
+
+
+
+
+

统计函数

+

创建向量的直方图

+
+
hist(x)
+ +
+
+
+

函数调用-练习

+

题目:设有一组数据集合 x 包含了一些整数,请编写R语言代码计算并输出以下指标:

+
    +
  • 平均值(mean)
  • +
  • 中位数(median)
  • +
  • 最大值(maximum)
  • +
  • 最小值(minimum)
  • +
  • 数据集合中所有元素的和(sum)
  • +
  • 数据集合的标准差(standard deviation)
  • +
  • 数据集合 x 为:x <- c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
  • +
+

要求:使用R语言编写函数,输入参数为数据集合 x,输出为以上指标的值。

+
+
+

控制流程

+

if-else 语句

+
+
x <- 10
+
+if (x > 10) {
+  print("x 大于 10")
+} else {
+  print("x 不大于 10")
+}
+
+
[1] "x 不大于 10"
+
+
+
+
+

控制流程

+

for 循环

+
+
for (i in 1:5) {
+  print(i)
+}
+
+
[1] 1
+[1] 2
+[1] 3
+[1] 4
+[1] 5
+
+
+
+
+

自定义函数

+

定义函数

+

使用 function 关键字定义函数,并使用 return 关键字返回结果。

+
+
my_function <- function(x, y) {
+  return(x + y)
+}
+
+

调用函数

+
+
result <- my_function(3, 4)
+print(result)
+
+
[1] 7
+
+
+
+
+

数据结构

+

向量

+

向量是一维数组,可以包含相同类型的元素。

+
+
(v <- c(1, 2, 3, 4, 5))
+
+
[1] 1 2 3 4 5
+
+
+

列表

+

列表可以包含不同类型的元素。

+
+
(l <- list(a = 1, b = "hello", c = TRUE))
+
+
$a
+[1] 1
+
+$b
+[1] "hello"
+
+$c
+[1] TRUE
+
+
+
+
+

数值型向量

+

什么是数值型向量?

+
    +
  • 在 R 中,向量是一种基本的数据结构。
  • +
  • 数值型向量包含相同类型的数值元素。
  • +
+

创建数值型向量

+
+
# 使用 c() 函数创建数值型向量
+(numeric_vector <- c(1, 2, 3, 4, 5))
+
+
[1] 1 2 3 4 5
+
+
+
+
+

数值型向量

+

向量运算

+
+
# 创建两个数值型向量
+(vector1 <- c(1, 2, 3))
+
+
[1] 1 2 3
+
+
(vector2 <- c(4, 5, 6))
+
+
[1] 4 5 6
+
+
# 执行向量加法
+(result <- vector1 + vector2)
+
+
[1] 5 7 9
+
+
# 执行向量乘法
+(result <- vector1 * vector2)
+
+
[1]  4 10 18
+
+
+
+
+

向量运算

+

向量求和

+
+
# 创建数值型向量
+vector <- c(1, 2, 3, 4, 5)
+
+# 求和
+(sum_result <- sum(vector))
+
+
[1] 15
+
+
+
+
+

向量运算

+

向量平均值

+
+
# 创建数值型向量
+vector <- c(1, 2, 3, 4, 5)
+
+# 平均值
+(mean_result <- mean(vector))
+
+
[1] 3
+
+
+
+
+

运算-数值运算

+
    +
  • a 的平方。
  • +
  • b 的立方。
  • +
  • a 除以 b 的商和余数。
  • +
+

要求:使用R语言编写函数,输入参数为 a 和 b,输出为上述结果。

+
+
+

运算-逻辑运算

+
+
all(c(FALSE, 2, 1:3, 3) > 1)
+
+
[1] FALSE
+
+
any(c(FALSE, 2, 1:3, 3) > 1)
+
+
[1] TRUE
+
+
(flag1 <- FALSE)
+
+
[1] FALSE
+
+
(flag2 <- (3 > 2))
+
+
[1] TRUE
+
+
(flag3 <- TRUE * TRUE)
+
+
[1] 1
+
+
(flag4 <- TRUE * FALSE)
+
+
[1] 0
+
+
(flag5 <- TRUE & FALSE)
+
+
[1] FALSE
+
+
(flag6 <- TRUE | FALSE)
+
+
[1] TRUE
+
+
+
+
+

运算-逻辑运算

+
    +
  • which
  • +
+
+
which(c(FALSE, TRUE, TRUE, FALSE, NA))
+
+
[1] 2 3
+
+
which((11:15) > 12)
+
+
[1] 3 4 5
+
+
+
    +
  • identical
  • +
+
+
identical(c(1,2,3), c(1,2,NA))
+
+
[1] FALSE
+
+
identical(c(1L,2L,3L), c(1,2,3))
+
+
[1] FALSE
+
+
+
+
+

运算-字符型

+
    +
  • 特殊字符
  • +
+
+
c("abc", "", 'a cat', NA, '李明', "\n")
+
+
[1] "abc"   ""      "a cat" NA      "李明"  "\n"   
+
+
+
    +
  • paste
  • +
+
+
(users <- paste("ruser", 1:9))
+
+
[1] "ruser 1" "ruser 2" "ruser 3" "ruser 4" "ruser 5" "ruser 6" "ruser 7"
+[8] "ruser 8" "ruser 9"
+
+
paste(users, collapse = ", ")
+
+
[1] "ruser 1, ruser 2, ruser 3, ruser 4, ruser 5, ruser 6, ruser 7, ruser 8, ruser 9"
+
+
+
+
+

运算-字符型

+
    +
  • 大小写
  • +
+
+
letters[1:5]
+
+
[1] "a" "b" "c" "d" "e"
+
+
toupper(letters[6:9])
+
+
[1] "F" "G" "H" "I"
+
+
tolower(month.abb)
+
+
 [1] "jan" "feb" "mar" "apr" "may" "jun" "jul" "aug" "sep" "oct" "nov" "dec"
+
+
stringr::str_to_title(c("monday", "tuesday"))
+
+
[1] "Monday"  "Tuesday"
+
+
+
+
+

运算-字符型

+
    +
  • 字符串截取
  • +
+
+
substr("Monday", 1, 3)
+
+
[1] "Mon"
+
+
stringr::str_sub("Monday", 1, 3)
+
+
[1] "Mon"
+
+
+
+
+

运算-字符型

+
    +
  • 类型转换
  • +
+
+
100
+
+
[1] 100
+
+
as.character(100)
+
+
[1] "100"
+
+
as.numeric(c("0100", "0101"))
+
+
[1] 100 101
+
+
sprintf('renamedfile%03d.png', c(3, 99, 100))
+
+
[1] "renamedfile003.png" "renamedfile099.png" "renamedfile100.png"
+
+
+
+
+

运算-字符型

+
    +
  • 字符串替换
  • +
+
+
(mystr <- "He was wrong!")
+
+
[1] "He was wrong!"
+
+
gsub("wrong", "right", mystr)
+
+
[1] "He was right!"
+
+
+
+
+

索引

+

向量

+
+
# 创建一个向量
+vector <- c("apple", "banana", "cherry", "date")
+# 访问第三个元素
+vector[3]
+
+
[1] "cherry"
+
+
# 访问多个元素
+vector[c(2, 4)]
+
+
[1] "banana" "date"  
+
+
vector[c(2:4)]
+
+
[1] "banana" "cherry" "date"  
+
+
+
+
+

索引

+

向量

+
+
# 除了第2个元素
+vector[-2]
+
+
[1] "apple"  "cherry" "date"  
+
+
# 超界
+vector[100]
+
+
[1] NA
+
+
# 更新数据
+vector[7] <- "New Data"
+vector
+
+
[1] "apple"    "banana"   "cherry"   "date"     NA         NA         "New Data"
+
+
+
+
+

索引

+
+
(x <- 1:10)
+
+
 [1]  1  2  3  4  5  6  7  8  9 10
+
+
x[x > 6]
+
+
[1]  7  8  9 10
+
+
x[x < 3] <- 99
+x
+
+
 [1] 99 99  3  4  5  6  7  8  9 10
+
+
# which
+which(x > 10)
+
+
[1] 1 2
+
+
which.max(x)
+
+
[1] 1
+
+
which.min(x)
+
+
[1] 3
+
+
+
+
+

索引

+

列表

+
+
# 创建一个列表
+my_list <- list(fruit = c("apple", "banana", "cherry"),
+                numbers = c(1, 2, 3, 4, 5))
+
+# 访问列表中的第二个元素
+my_list[[2]]
+
+
[1] 1 2 3 4 5
+
+
+
+
+

索引

+

数据框

+
+
# 创建一个数据框
+df <- data.frame(fruit = c("apple", "banana", "cherry"),
+                 quantity = c(5, 7, 3))
+
+# 访问数据框中的第一个元素
+df[1, 1]
+
+
[1] "apple"
+
+
# 第2-3行
+df[2:3, ]
+
+
   fruit quantity
+2 banana        7
+3 cherry        3
+
+
+
+
+

日期和时间

+

base package

+
+
as.Date("2024-01-01")
+
+
[1] "2024-01-01"
+
+
as.POSIXct(1)
+
+
[1] "1970-01-01 08:00:01 CST"
+
+
as.Date(c("12/6/2022", "1/1/2023"), format="%m/%d/%Y")
+
+
[1] "2022-12-06" "2023-01-01"
+
+
+
+
+

日期和时间

+

lubridate package

+
+
lubridate::today()
+
+
[1] "2025-03-19"
+
+
require(lubridate)
+now()
+
+
[1] "2025-03-19 16:40:55 CST"
+
+
ymd(c(20200321, 240404, "20181231"))
+
+
[1] "2020-03-21" "2024-04-04" "2018-12-31"
+
+
mdy(c("3-10-1998", "01-17-2018", "Feb 3, 2024"))
+
+
[1] "1998-03-10" "2018-01-17" "2024-02-03"
+
+
ymd_hms("1998-03-16 13:15:45", tz = "Asia/Shanghai")
+
+
[1] "1998-03-16 13:15:45 CST"
+
+
+
+
+

日期和时间

+

lubridate package

+
+
make_date(2028, 1, 30)
+
+
[1] "2028-01-30"
+
+
as_date("2000-01-01")
+
+
[1] "2000-01-01"
+
+
as_datetime("2000-01-01", tz = "Asia/Shanghai")
+
+
[1] "2000-01-01 CST"
+
+
as_datetime("2024-02-01 8:00:00", tz = "Asia/Shanghai")
+
+
[1] "2024-02-01 08:00:00 CST"
+
+
+
+
+

日期和时间

+

lubridate package

+
+
year(today())
+
+
[1] 2025
+
+
wday(today())
+
+
[1] 4
+
+
hour(now())
+
+
[1] 16
+
+
+
+
+

日期和时间

+

lubridate package

+
+
(x <- now())
+
+
[1] "2025-03-19 16:40:55 CST"
+
+
floor_date(x, unit = "day")
+
+
[1] "2025-03-19 CST"
+
+
floor_date(x, unit = "hour")
+
+
[1] "2025-03-19 16:00:00 CST"
+
+
floor_date(x, unit = "10 minutes")
+
+
[1] "2025-03-19 16:40:00 CST"
+
+
ceiling_date(x, unit = "10 minutes")
+
+
[1] "2025-03-19 16:50:00 CST"
+
+
+
+
+

因子(factor)

+

Factor是什么?

+
    +
  • 在R中,Factor是用来表示分类数据的特殊数据类型。
  • +
  • 它将数据分成不同的水平(levels),每个水平代表了一个类别。
  • +
+
+
+

因子(factor)

+

创建Factor

+
+
# 创建一个Factor
+gender <- factor(c("Male", "Female", "Female", "Male"))
+# 查看Factor的水平
+levels(gender)
+
+
[1] "Female" "Male"  
+
+
# 改变Factor的水平顺序
+gender <- factor(gender, levels = c("Female", "Male"))
+summary(gender) # 使用Factor进行分组
+
+
Female   Male 
+     2      2 
+
+
as.numeric(gender) # 因子转换为纯粹的整数值
+
+
[1] 2 1 1 2
+
+
as.character(gender) # 转为字符
+
+
[1] "Male"   "Female" "Female" "Male"  
+
+
+
+
+

因子(factor)

+

Label of Factor

+
+
(x <- factor(1:12, label = month.abb))
+
+
 [1] Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
+Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
+
+
factor(x, levels = month.abb[c(2:12, 1)])
+
+
 [1] Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
+Levels: Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan
+
+
+

分组

+
+
cut(1:20, breaks=c(0, 5, 10, 15, 18, 20))
+
+
 [1] (0,5]   (0,5]   (0,5]   (0,5]   (0,5]   (5,10]  (5,10]  (5,10]  (5,10] 
+[10] (5,10]  (10,15] (10,15] (10,15] (10,15] (10,15] (15,18] (15,18] (15,18]
+[19] (18,20] (18,20]
+Levels: (0,5] (5,10] (10,15] (15,18] (18,20]
+
+
+
+
+

矩阵

+
+
1:20
+
+
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
+
+
(A <- matrix(1:20, nrow = 4, byrow = TRUE))
+
+
     [,1] [,2] [,3] [,4] [,5]
+[1,]    1    2    3    4    5
+[2,]    6    7    8    9   10
+[3,]   11   12   13   14   15
+[4,]   16   17   18   19   20
+
+
(B <- matrix(1:20, nrow = 4, byrow = FALSE))
+
+
     [,1] [,2] [,3] [,4] [,5]
+[1,]    1    5    9   13   17
+[2,]    2    6   10   14   18
+[3,]    3    7   11   15   19
+[4,]    4    8   12   16   20
+
+
nrow(A)
+
+
[1] 4
+
+
ncol(B)
+
+
[1] 5
+
+
+
+
+

矩阵

+

高维矩阵

+
+
X <- array(1:12, dim = c(3, 2, 2))
+dim(C)
+
+
NULL
+
+
X[1, , ]
+
+
     [,1] [,2]
+[1,]    1    7
+[2,]    4   10
+
+
X[1, , 1]
+
+
[1] 1 4
+
+
+
+
+

矩阵

+

cbindrbind

+
+
cbind(X[1, , ], X[2, , ], X[3, , ])
+
+
     [,1] [,2] [,3] [,4] [,5] [,6]
+[1,]    1    7    2    8    3    9
+[2,]    4   10    5   11    6   12
+
+
rbind(X[1, , ], X[2, , ], X[3, , ])
+
+
     [,1] [,2]
+[1,]    1    7
+[2,]    4   10
+[3,]    2    8
+[4,]    5   11
+[5,]    3    9
+[6,]    6   12
+
+
cbind(c(1,2), c(3,4), c(5,6))
+
+
     [,1] [,2] [,3]
+[1,]    1    3    5
+[2,]    2    4    6
+
+
+
+
+

数据框(data frame)

+

最主要的数据形式。

+
+
# 创建数据框
+(df <- data.frame(
+  Name = c("Alice", "Bob", "Charlie"),
+  Age = c(25, 30, 35),
+  Married = c(TRUE, FALSE, TRUE)
+))
+
+
     Name Age Married
+1   Alice  25    TRUE
+2     Bob  30   FALSE
+3 Charlie  35    TRUE
+
+
names(df)
+
+
[1] "Name"    "Age"     "Married"
+
+
colnames(df)
+
+
[1] "Name"    "Age"     "Married"
+
+
ncol(df); nrow(df)
+
+
[1] 3
+
+
+
[1] 3
+
+
+
+
+

数据框(data frame)

+
+
df[1, 1]
+
+
[1] "Alice"
+
+
df[2, ]
+
+
  Name Age Married
+2  Bob  30   FALSE
+
+
df[, 1]
+
+
[1] "Alice"   "Bob"     "Charlie"
+
+
df$Age
+
+
[1] 25 30 35
+
+
df[["Age"]]
+
+
[1] 25 30 35
+
+
df[, "Age"]
+
+
[1] 25 30 35
+
+
+
+
+

数据框(data frame)

+
+
X <- matrix(1:9, nrow = 3)
+class(X)
+
+
[1] "matrix" "array" 
+
+
(Y <- as.data.frame(X))
+
+
  V1 V2 V3
+1  1  4  7
+2  2  5  8
+3  3  6  9
+
+
names(Y)
+
+
[1] "V1" "V2" "V3"
+
+
names(Y) <- c("colA", "colB", "colC")
+
+
+
+

欢迎讨论!

+ 苏命|https://drwater.net; https://drwater.net/team/ming-su/; Slides

+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SD/index.qmd b/SD/index.qmd index eeafff2..15f81ca 100644 --- a/SD/index.qmd +++ b/SD/index.qmd @@ -1,5 +1,6 @@ --- subtitle: "课件" +freeze: false --- ```{r}