学习R语言第一步:基础知识详解
欢迎来到R语言的世界!如果你对数据分析、统计计算、数据可视化感兴趣,或者仅仅是对编程充满好奇,那么学习R语言是一个非常棒的选择。R因其强大的统计能力、丰富的可视化库以及活跃的社区支持,已成为数据科学领域不可或缺的工具。
本文将带你踏上R语言学习之旅的第一步,深入讲解R语言最核心、最基础的知识。这些基础知识是后续学习一切高级技巧和应用的地基。打牢它们,你将能更顺畅地掌握R的强大功能。
我们将涵盖以下内容:
- 什么是R语言,以及为什么要学习它?
- R和RStudio:你的工作环境
- R语言的基本语法
- R语言的数据类型
- R语言的核心数据结构:向量、列表、矩阵、数据框等
- 基础操作与内置函数
- 获取帮助与管理包
- 一个简单的实战演练
准备好了吗?让我们开始吧!
第一章:踏上R语言之旅:初识与准备
1.1 什么是R语言?
R语言是一种专门用于统计计算、数据分析和数据可视化的编程语言和环境。它由新西兰奥克兰大学的 Ross Ihaka 和 Robert Gentleman 于20世纪90年代创立,是S语言的一个开源实现。
R语言的特点:
- 强大的统计能力: R拥有海量统计模型和分析技术的内置函数及扩展包,几乎涵盖了所有的统计方法。
- 优秀的数据可视化: R的图形功能非常强大,特别是
ggplot2
包,可以创建出精美、复杂的统计图形。 - 开源免费: R是GNU项目的一部分,可以免费获取和使用,这意味着你可以自由地安装、运行、学习、修改和分发它。
- 跨平台: R可以在Windows、macOS和Linux等多种操作系统上运行。
- 活跃的社区: R拥有一个庞大而活跃的社区,你可以轻松找到帮助、教程和最新的研究成果。
- 丰富的扩展包(Packages): 这是R语言最强大的地方之一。全球的科学家和开发者贡献了大量的扩展包,用于完成各种特定的任务,如机器学习、生物信息学、金融分析、网络爬虫等等。
1.2 为什么要学习R语言?
- 数据科学领域的主流工具: 无论是在学术界还是工业界,R语言都被广泛应用于数据清洗、转换、建模、分析和报告。
- 强大的统计和可视化能力: 如果你的工作或学习涉及大量的数据分析和统计推断,R几乎是最佳选择。
- 职业发展: 掌握R语言是进入数据分析师、数据科学家、统计师等相关职业的重要技能。
- 解决实际问题: 无论是分析销售数据、研究基因表达、预测市场趋势还是进行社会学调查,R都能提供强大的支持。
1.3 R和RStudio:你的工作环境
虽然你可以直接在R的命令行界面(Console)中工作,但强烈推荐使用RStudio。
- R (Base R): 就像汽车的引擎,它是R语言解释器本身,执行你的代码。
- RStudio: 就像汽车的驾驶舱,它是一个集成开发环境(IDE),为R提供了更友好的界面和更便捷的功能,包括代码编辑器、控制台、变量查看器、文件浏览器、帮助文档查看器等。
安装步骤(简述):
- 安装R: 访问 CRAN (Comprehensive R Archive Network),选择适合你操作系统的版本进行下载和安装。
- 安装RStudio: 访问 RStudio官方网站,下载对应的桌面版本(通常选择免费的RStudio Desktop)。安装R之后再安装RStudio。
安装完成后,打开RStudio,你将看到一个包含多个面板的界面,这就是你学习和使用R语言的主要工作台。
第二章:熟悉你的工作台:RStudio环境概览
RStudio的默认界面通常包含四个主要面板(pane),它们可以根据你的需要进行布局调整。理解这些面板的功能对于高效学习R至关重要。
-
Source Pane (左上角):
- 这是你编写R脚本(.R文件)的地方。编写代码而不是直接在控制台输入的好处是可以保存你的工作,方便重复执行、修改和分享。
- 你可以运行选中行或整个脚本。
- 这是你构建复杂程序或分析流程的主要区域。
-
Console Pane (左下角,或与Source pane并列):
- 这是R语言解释器直接交互的地方。你可以在这里输入R代码,按Enter键立即执行,并看到结果。
- 当你在Source面板中运行代码时,代码会发送到Console中执行。
- 它会显示代码的输出、警告和错误信息。
- 前面会有一个
>
提示符,表示R正在等待你的输入。
-
Environment/History Pane (右上角):
- Environment (环境): 显示当前R会话中创建的所有对象(变量、函数、数据框等)。你可以看到对象的名称、类型以及部分内容(例如,向量的几个元素,数据框的维度)。这帮助你了解当前有哪些数据可用。
- History (历史): 记录你在Console中执行过的所有命令。你可以方便地查找并重新执行之前的命令。
-
Files/Plots/Packages/Help/Viewer Pane (右下角):
- Files (文件): 一个文件浏览器,用于导航你的文件系统。你可以通过它打开脚本、查看数据文件等。它也显示你的当前工作目录(Working Directory)。
- Plots (图): 当你生成图表时,图表会显示在这里。你可以缩放、导出或删除图表。
- Packages (包): 列出所有已安装的R扩展包。你可以查看哪些包已加载,以及安装、更新或删除包。
- Help (帮助): 显示R的帮助文档。当你查找某个函数的使用方法时,帮助文档会在这里打开。
- Viewer (查看器): 用于显示本地的网页内容,例如由
rmarkdown
生成的交互式文档。
基本工作流程:
- 在Source面板编写代码(例如,保存为
my_script.R
)。 - 选择要执行的代码行,按
Ctrl + Enter
(Windows/Linux) 或Cmd + Enter
(macOS) 将代码发送到Console执行。 - 在Console中查看代码输出、结果或错误。
- 在Environment面板中检查新创建的变量和数据。
- 如果生成了图表,在Plots面板查看。
- 需要某个函数的帮助?在Console中输入
?function_name
,帮助文档会在Help面板打开。
第三章:R语言的基石:基本语法与数据类型
掌握编程语言的基础语法是编写代码的前提,理解数据类型则是操作数据的核心。
3.1 基本语法规则
- 区分大小写: R语言严格区分大小写。
my_variable
和My_Variable
是两个不同的变量。函数名、包名也一样。 - 赋值操作符: 最常用的是
<-
(小于号加上减号)。例如:x <- 10
表示将值10
赋给变量x
。你也可以使用=
,但在某些上下文(如函数参数)中=
有特殊含义,因此推荐使用<-
进行变量赋值,这在R社区是更常见的风格。 - 注释: 使用
#
符号。#
后面的内容直到行尾都会被R忽略,用于解释代码。这是一个非常好的习惯!
R
# 这是一个注释
my_variable <- 10 # 变量赋值 - 语句分隔: 一行通常就是一个语句。如果一个语句太长需要跨行,可以在运算符或逗号后换行。多个短语句可以在同一行用
;
分隔,但不推荐,会降低可读性。 - 函数调用:
函数名(参数1, 参数2, ...)
。例如:print("Hello, R!")
。 - 空格: R通常不强制要求特定数量的空格,但在运算符两侧、函数参数逗号后添加空格可以提高代码的可读性。
3.2 R语言的基本数据类型
R语言有多种基本数据类型,它们定义了数据存储的种类。理解它们是理解R数据结构的基础。
-
Numeric (数值型): 这是最常见的数值类型,包括整数和浮点数(带小数)。
R
# 默认是 numeric
x <- 10.5
y <- 10 # 虽然是整数,但默认也是 numeric
class(x) # 输出: "numeric"
class(y) # 输出: "numeric" -
Integer (整型): 专门用于存储整数。在数字后面加上
L
明确表示为整型。
R
z <- 10L
class(z) # 输出: "integer"
is.integer(z) # 输出: TRUE
is.numeric(z) # 输出: TRUE (整型是数值型的一种) -
Logical (逻辑型): 存储布尔值,即
TRUE
(真)或FALSE
(假)。也可以用缩写T
和F
,但不推荐,因为T
和F
可以被用户重新赋值。
R
is_true <- TRUE
is_false <- FALSE
class(is_true) # 输出: "logical"
1 == 1 # 输出: TRUE
1 > 2 # 输出: FALSE -
Character (字符型/字符串): 存储文本数据,用双引号
""
或单引号''
包围。
R
my_string <- "Hello, R World!"
another_string <- 'Data Analysis'
class(my_string) # 输出: "character" -
Complex (复数型): 存储复数,包含实部和虚部。对初学者不常用。
R
my_complex <- 1 + 2i
class(my_complex) # 输出: "complex" -
Raw (原生型): 存储字节数据,通常用于底层操作,对初学者不常用。
你可以使用 class()
函数来检查任何R对象的类型。
第四章:数据的容器:R语言核心数据结构
R语言提供了多种数据结构来组织不同类型的数据。理解这些结构及其特点对于高效处理数据至关重要。
4.1 Vector (向量)
- 向量是R中最基本的数据结构,用于存储同一种类型的数据元素的集合。
- 使用
c()
函数(combine 或 concatenate 的缩写)创建向量。 - 向量中的元素是有序的。
- 如果试图将不同类型的数据放入同一个向量,R会自动进行强制类型转换,转换为所有元素都能表示的“最高”类型(优先级通常是:Character > Complex > Numeric > Integer > Logical)。
示例:
“`R
数值型向量
numeric_vector <- c(1, 5, 3.14, 100)
class(numeric_vector) # 输出: “numeric”
length(numeric_vector) # 输出: 4
字符型向量
character_vector <- c(“apple”, “banana”, “cherry”)
class(character_vector) # 输出: “character”
逻辑型向量
logical_vector <- c(TRUE, FALSE, TRUE, TRUE)
class(logical_vector) # 输出: “logical”
混合类型 – 会强制转换
mixed_vector <- c(1, “hello”, TRUE)
class(mixed_vector) # 输出: “character”
print(mixed_vector) # 输出: “1” “hello” “TRUE” (数字和逻辑值被转换为字符串)
访问向量元素:使用方括号 [] 和索引。R的索引从 1 开始!
numeric_vector[1] # 输出: 1
character_vector[2] # 输出: “banana”
logical_vector[c(1, 4)] # 访问多个元素,输出: TRUE TRUE
numeric_vector[-2] # 排除第二个元素,输出: 1.00 3.14 100.00
numeric_vector[numeric_vector > 5] # 逻辑索引,输出: 100
“`
4.2 List (列表)
- 列表是R中另一种重要的数据结构,它可以存储不同类型的数据元素的集合。
- 列表的元素可以是向量、矩阵、数据框、甚至其他的列表。
- 使用
list()
函数创建列表。
示例:
“`R
创建一个列表,包含不同类型的元素
my_list <- list(
name = “Alice”, # 字符型
age = 30, # 数值型
is_student = FALSE, # 逻辑型
scores = c(95, 88, 92), # 数值型向量
matrix_data = matrix(1:4, nrow = 2) # 矩阵
)
class(my_list) # 输出: “list”
访问列表元素:
使用 [[ ]] 访问元素本身
my_list[[1]] # 输出: “Alice”
my_list[[“name”]] # 输出: “Alice” (如果元素有名称)
my_list[[4]] # 输出: 95 88 92 (访问 scores 向量)
使用 $ 访问具名元素
my_list$name # 输出: “Alice”
my_list$scores # 输出: 95 88 92
使用 [ ] 访问列表的一个或多个“子列表”
my_list[1] # 输出: list(“Alice”) (结果仍然是一个列表)
my_list[c(“name”, “age”)] # 输出: list(name=”Alice”, age=30) (结果仍然是一个列表)
访问列表中元素的内部元素
my_list$scores[1] # 输出: 95 (访问 scores 向量的第一个元素)
my_list[[5]][1, 2] # 输出: 3 (访问 matrix_data 矩阵的第一行第二列)
``
[ ]
理解,
[[ ]], 和
$在访问列表时的区别非常重要。
[[ ]]和
$用于提取列表中的**单个元素**,而
[ ]` 总是提取一个子列表。
4.3 Matrix (矩阵)
- 矩阵是一个二维的数据结构,所有元素必须是同一种类型。
- 矩阵有行和列。
- 使用
matrix()
函数创建矩阵。
示例:
“`R
创建一个 2×3 的数值型矩阵
my_matrix <- matrix(
data = 1:6, # 数据,按列填充
nrow = 2, # 行数
ncol = 3, # 列数 (可选,会自动计算)
byrow = FALSE # 默认按列填充,设为 TRUE 则按行填充
)
print(my_matrix)
输出:
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
按行填充的矩阵
my_matrix_row <- matrix(1:6, nrow = 2, byrow = TRUE)
print(my_matrix_row)
输出:
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
访问矩阵元素:使用方括号 [] 和 [行索引, 列索引]
my_matrix[1, 2] # 输出: 3 (第一行第二列)
my_matrix[, 1] # 输出: 1 2 (访问第一列,结果是向量)
my_matrix[2, ] # 输出: 2 4 6 (访问第二行,结果是向量)
my_matrix[1, c(1, 3)] # 访问第一行的第一列和第三列,输出: 1 5
my_matrix[c(1, 2), c(1, 3)] # 访问第一、二行的第一、三列,输出一个子矩阵
输出:
[,1] [,2]
[1,] 1 5
[2,] 2 6
“`
4.4 Data Frame (数据框)
- 数据框是R中最重要、最常用的数据结构,尤其适用于存储表格型数据(如来自CSV文件或数据库的数据)。
- 数据框可以看作是一个特殊的列表,其中每个元素是长度相等的向量,这些向量构成了数据框的列。
- 不同列(向量)可以存储不同类型的数据,但同一列内部的数据必须是同一种类型(向量的性质)。
- 数据框有行名和列名。
- 使用
data.frame()
函数创建数据框。
示例:
“`R
创建一个数据框
students <- data.frame(
name = c(“Alice”, “Bob”, “Charlie”), # 字符型向量
age = c(25, 30, 22), # 数值型向量
is_enrolled = c(TRUE, FALSE, TRUE) # 逻辑型向量
)
print(students)
输出:
name age is_enrolled
1 Alice 25 TRUE
2 Bob 30 FALSE
3 Charlie 22 TRUE
class(students) # 输出: “data.frame”
str(students) # 查看数据框的结构 (非常有用!)
‘data.frame’: 3 obs. of 3 variables:
$ name : chr “Alice” “Bob” “Charlie”
$ age : num 25 30 22
$ is_enrolled: logi TRUE FALSE TRUE
访问数据框元素:
访问列 (常用 $ 或 [[ ]]),结果是向量
students$name # 输出: “Alice” “Bob” “Charlie”
students[[“age”]] # 输出: 25 30 22
students[, 1] # 输出: “Alice” “Bob” “Charlie”
访问列 (使用 [ ] ),结果是数据框
students[“name”] # 输出: data.frame(name = c(“Alice”, “Bob”, “Charlie”))
访问行 (使用 [行索引, ]),结果是数据框 (除非只有一列且使用了 drop=TRUE)
students[1, ] # 输出: 一行的数据框
name age is_enrolled
1 Alice 25 TRUE
访问特定单元格
students[1, 2] # 输出: 25 (第一行第二列的值)
students[3, “name”] # 输出: “Charlie” (第三行name列的值)
逻辑索引 – 过滤数据框 (非常常用!)
找出所有 enrolled 的学生
enrolled_students <- students[students$is_enrolled == TRUE, ]
print(enrolled_students)
name age is_enrolled
1 Alice 25 TRUE
3 Charlie 22 TRUE
找出年龄大于25的学生
older_students <- students[students$age > 25, ]
print(older_students)
name age is_enrolled
2 Bob 30 FALSE
“`
4.5 Array (数组)
- 数组是向量、矩阵的泛化,可以存储同一种类型的、具有多个维度的数据。
- 矩阵是二维数组的特例。
- 使用
array()
函数创建数组。初学者不常用。
示例:
“`R
创建一个 2x3x2 的三维数组
my_array <- array(
data = 1:12,
dim = c(2, 3, 2) # 维度:2行,3列,2层/片
)
print(my_array)
访问数组元素:[行索引, 列索引, 维度1索引, 维度2索引, …]
my_array[1, 2, 1] # 访问第一片的第一行第二列
“`
4.6 Factor (因子)
- 因子用于存储分类数据(Categorical Data)。
- 虽然看起来像字符型向量,但因子在内部存储的是整数,并关联一个“水平”(levels)集合,表示所有可能的类别。
- 这使得因子在统计建模中特别有用,因为R会根据因子自动进行哑变量编码。
- 使用
factor()
函数创建因子。
示例:
“`R
字符型向量
gender_char <- c(“male”, “female”, “male”, “female”, “male”)
class(gender_char) # 输出: “character”
转换为因子
gender_factor <- factor(gender_char)
print(gender_factor)
输出:
[1] male female male female male
Levels: female male (注意默认按字母顺序排列水平)
class(gender_factor) # 输出: “factor”
levels(gender_factor) # 输出: “female” “male”
“`
理解数据结构之间的差异和用途是使用R进行数据处理的关键。向量、列表和数据框是你在日常工作中会频繁打交道的数据结构。
第五章:操作数据:基础运算与函数
学习了数据类型和数据结构,接下来就要学习如何对这些数据进行操作。
5.1 基础运算符
R支持常见的算术、比较和逻辑运算符,并且这些运算符通常是“向量化”的,这意味着它们可以直接应用于整个向量,而无需编写循环。
-
算术运算符:
+
(加),-
(减),*
(乘),/
(除),^
或**
(乘方),%%
(取余),%/%
(整除)
R
a <- c(1, 2, 3)
b <- c(4, 5, 6)
a + b # 输出: 5 7 9 (对应元素相加)
a * 2 # 输出: 2 4 6 (每个元素乘以 2)
10 %% 3 # 输出: 1 (10 除以 3 的余数)
10 %/% 3 # 输出: 3 (10 除以 3 的整数部分) -
比较运算符:
>
(大于),<
(小于),==
(等于),!=
(不等于),>=
(大于等于),<=
(小于等于)
这些运算符返回逻辑型向量。
R
c(1, 5, 3) > 2 # 输出: FALSE TRUE TRUE
c("apple", "banana") == "apple" # 输出: TRUE FALSE -
逻辑运算符:
&
(逻辑与),|
(逻辑或),!
(逻辑非)
用于组合逻辑条件。&&
和||
是它们的特殊形式,只比较第一个元素,常用于if
语句。
R
logic1 <- c(TRUE, FALSE, TRUE)
logic2 <- c(TRUE, TRUE, FALSE)
logic1 & logic2 # 输出: TRUE FALSE FALSE (对应元素进行逻辑与)
logic1 | logic2 # 输出: TRUE TRUE TRUE (对应元素进行逻辑或)
!logic1 # 输出: FALSE TRUE FALSE
5.2 R的内置函数
R提供了大量的内置函数来执行各种任务。函数是一段封装好的代码,接收输入(参数),执行特定操作,并返回输出。
- 调用函数:
函数名(参数1, 参数2, ...)
。参数可以按位置传递,也可以按名称传递(参数名 = 值
)。按名称传递可以不考虑参数的顺序,提高了代码的可读性。
常用基础函数示例:
-
数学函数:
sum()
,mean()
,median()
,sd()
(标准差),min()
,max()
,abs()
(绝对值),sqrt()
(平方根),log()
,exp()
,round()
(四舍五入) 等。
R
data_vector <- c(10, 20, 30, 40, 50)
mean(data_vector) # 输出: 30
sum(data_vector) # 输出: 150
sd(data_vector) # 输出: 15.81139
round(3.14159, digits = 2) # 输出: 3.14 -
统计函数:
summary()
(生成数据概览),table()
(计数),quantile()
(分位数) 等。
R
summary(data_vector) # 输出 Min, 1st Qu, Median, Mean, 3rd Qu, Max
table(c("A", "B", "A", "C", "B", "A")) # 输出类别计数
# A B C
# 3 2 1 -
字符串函数:
nchar()
(字符串长度),paste()
(连接字符串),substr()
(提取子字符串),grep()
(查找匹配模式的字符串) 等。
R
paste("Hello", "World") # 输出: "Hello World"
paste("Hello", "World", sep = "_") # 输出: "Hello_World"
nchar("R Language") # 输出: 10 -
数据结构函数:
c()
,list()
,matrix()
,data.frame()
,factor()
(创建),length()
(长度),dim()
(维度),names()
(获取/设置名称),colnames()
,rownames()
,class()
,str()
(结构) 等。 -
序列生成:
seq()
(生成序列),rep()
(重复)
R
seq(1, 10, by = 2) # 从 1 到 10,步长为 2,输出: 1 3 5 7 9
1:5 # 简写,输出: 1 2 3 4 5
rep("A", times = 5) # 重复 "A" 5次,输出: "A" "A" "A" "A" "A"
rep(c(1, 2), each = 3) # 重复向量,每个元素重复3次,输出: 1 1 1 2 2 2
掌握如何查找和使用这些内置函数是提高R编程效率的关键。
第六章:获取帮助与管理包:持续学习的关键
R语言的功能之所以如此强大,很大程度上得益于其庞大的扩展包生态系统。学习如何获取帮助和管理这些包是R学习过程中必不可少的一部分。
6.1 如何获取帮助
当你忘记了某个函数的用法,或者想了解某个概念时,R的帮助系统是你的第一个求助对象。
-
精确查找函数帮助: 如果你知道函数名,可以使用
?
或help()
。
R
?mean # 打开 mean() 函数的帮助页面
help("mean") # 和上面等价
帮助页面通常包含函数描述、使用方法(Usage)、参数说明(Arguments)、详细信息(Details)、返回值(Value)、示例(Examples)等部分。请务必查看 Examples 部分,它们是理解函数用法的绝佳途径。 -
模糊查找: 如果你不确定函数名,或者想查找某个主题,可以使用
??
或help.search()
。
R
??regression # 搜索包含 "regression" 关键词的帮助页面
help.search("plotting") # 搜索 plotting 相关主题 -
查看函数示例:
example()
函数会运行帮助文档中的示例代码。
R
example(plot) # 运行 plot() 函数的示例 -
在线资源: R社区非常活跃,stackoverflow.com、R-help邮件列表、各类R博客和教程网站都是获取帮助和学习的宝库。
6.2 R的扩展包 (Packages)
- 什么是包? 包是R函数、数据、编译代码和文档的集合,以特定格式存储。它们扩展了R的基础功能。
- CRAN (Comprehensive R Archive Network): 大多数常用的R包都发布在CRAN上,这是R包的官方仓库。
- Bioconductor: 专注于生物信息学领域的包仓库。
- GitHub: 许多开发者在GitHub上分享尚未发布到CRAN或Bioconductor的开发中或特定用途的包。
安装和加载包:
-
安装包: 使用
install.packages()
函数从CRAN安装包。只需要安装一次(除非需要更新)。
R
install.packages("ggplot2") # 安装用于数据可视化的 ggplot2 包
install.packages(c("dplyr", "readr")) # 安装多个包
安装时,RStudio会询问你选择一个CRAN镜像,选择离你地理位置近的即可。 -
加载包: 在每个新的R会话中,你需要使用
library()
或require()
函数来加载已安装的包,才能使用其中的函数。
R
library(ggplot2) # 加载 ggplot2 包
require(dplyr) # 加载 dplyr 包 (功能类似 library,但不常用)
通常推荐使用library()
。如果加载成功,包中的函数就可以直接使用了(例如,加载ggplot2
后,就可以使用ggplot()
函数)。 -
查看已安装和已加载的包:
R
installed.packages() # 查看所有已安装的包
search() # 查看当前已加载(在搜索路径中)的包
包管理是R学习和使用的日常任务。当你需要某个特定功能时(例如,处理 Excel 文件,进行某个特定的统计检验,绘制某种图表),第一步通常是搜索是否有现成的R包可以完成任务。
第七章:实战演练:将基础知识串联起来
理论知识学习得再多,也需要通过实践来巩固。我们来做一个简单的实战演练,使用前面学到的基础知识。
场景: 你有一些关于几个城市天气的数据(城市名称、温度、湿度)。你想把这些数据存储起来,计算平均温度,并找出湿度最高的城市。
“`R
1. 创建数据:使用向量和数据框
创建三个向量,分别存储城市名称、温度和湿度
cities <- c(“Beijing”, “Shanghai”, “Guangzhou”, “Shenzhen”, “Chengdu”)
temperatures <- c(25, 28, 30, 29, 26)
humidity <- c(60, 65, 75, 70, 62)
将这些向量组合成一个数据框
weather_data <- data.frame(
City = cities,
Temperature = temperatures,
Humidity = humidity
)
2. 查看数据框的结构和内容
print(weather_data)
str(weather_data)
summary(weather_data)
3. 进行基础计算:计算平均温度
average_temp <- mean(weather_data$Temperature)
print(paste(“平均温度是:”, average_temp, “摄氏度”)) # 使用 paste() 连接字符串和数值
4. 数据筛选和查找:找出湿度最高的城市
找到湿度的最大值
max_humidity <- max(weather_data$Humidity)
找到湿度等于最大值的数据行 (逻辑索引)
highest_humidity_city_row <- weather_data[weather_data$Humidity == max_humidity, ]
提取城市名称
highest_humidity_city_name <- highest_humidity_city_row$City
print(paste(“湿度最高的城市是:”, highest_humidity_city_name))
5. 尝试一些其他操作 (可选)
找出温度大于 28 度的城市
hot_cities <- weather_data[weather_data$Temperature > 28, ]
print(“温度大于 28 度的城市:”)
print(hot_cities)
向数据框添加一列,例如,是否湿度高于平均水平
average_humidity <- mean(weather_data$Humidity)
weather_data$Is_Humidity_Above_Avg <- weather_data$Humidity > average_humidity
print(weather_data)
“`
这个简单的例子展示了如何创建数据框,如何使用 $
或 []
访问数据,如何使用内置函数 (mean
, max
, paste
, print
, str
, summary
) 进行计算和概览,以及如何使用逻辑索引进行数据筛选。这些都是你在R中进行数据分析的常用操作。
第八章:下一步是什么?
恭喜你!你已经了解了R语言最核心的基础知识:数据类型、数据结构以及基础的操作方式。这就像学会了字母和基本的单词,接下来就可以开始学习如何组成句子、写文章了。
在你打牢这些基础之后,可以继续学习以下更进阶的主题:
- 控制流:
if/else
条件判断,for
循环,while
循环等,让你能够编写更灵活的程序。 - 编写函数: 如何将重复的代码块封装成自己的函数,提高代码的复用性。
- 数据读写: 如何从 CSV、Excel、数据库等外部文件或来源读取数据,以及如何将结果保存到文件。
- 数据操作与清洗: 使用
dplyr
,tidyr
等包进行高效的数据转换、整理和清洗。 - 数据可视化: 使用
ggplot2
包创建各种精美的数据图表。 - 统计建模: 如何在R中进行线性回归、逻辑回归、方差分析等统计分析。
学习编程和数据分析是一个持续的过程,需要不断地实践和探索。当你遇到问题时,不要害怕查阅文档、搜索网络、或者向社区提问。
结论
R语言是一个功能强大且应用广泛的工具,尤其在数据科学领域。掌握其基础知识——包括熟悉RStudio环境、理解基本语法、区分和运用各种数据类型和数据结构、掌握基础运算和函数、学会查阅帮助文档和管理扩展包——是开启你R语言学习之旅的关键。
希望本文为你提供了扎实的第一步指引。记住,最重要是动手实践,不断尝试。随着你对R的深入了解,你会发现它能为你打开一个全新的数据世界。
祝你学习顺利!