目录
1.介绍
R语言是一种广泛使用的统计编程语言,尤其适合数据分析、统计计算和图形绘制。
2.语法
2.1赋值
在R中,赋值操作可以使用 <-
或者 =
来完成。尽管 =
更加直观,但是 <-
在R的历史中更为传统,也被广泛使用。
x <- 5 # 使用 <- 赋值
x = 5 # 使用 = 赋值
2.2算数运输
R支持基本的算术运算,包括加法 +、减法 -、乘法 *、除法 / 和取模(求余数)%%。
a <- 10
b <- 3
print(a + b) # 加法
print(a - b) # 减法
print(a * b) # 乘法
print(a / b) # 除法
print(a %% b) # 求余
2.3取子集
R提供了多种方法来提取或访问向量、矩阵或数据框中的元素。索引通常使用方括号 [ 和 ]。
vec <- c(1, 2, 3, 4, 5) # 创建一个向量
print(vec[2]) # 访问第二个元素
print(vec[c(1, 3)]) # 访问第一个和第三个元素
print(vec[-2]) # 访问除了第二个元素之外的所有元素
# 对于数据框
df <- data.frame(
name = c("Alice", "Bob", "Charlie"),
age = c(25, 30, 35),
stringsAsFactors = FALSE
)
print(df$name) # 访问name列
print(df[1, ]) # 访问第一行
print(df[, "age"]) # 访问age列
2.4数据类型
R中有几种基本的数据类型,包括标量、向量、矩阵、数组、列表、因子等。
- 标量:标量是最基本的数据类型,如数字
5
。 - 向量:向量是一维的数组,可以存储相同类型的元素。
- 矩阵:矩阵是二维数组。
- 数组:数组可以有多个维度。
- 列表:列表是存储不同类型的元素的有序集合。
- 因子:因子是用来表示分类变量的数据类型。
2.4.1标量
标量是最简单的数据类型,表示单个值。R中的标量实际上是一个长度为1的向量,它可以是数值型、字符型、逻辑型(布尔型)或复数型。
数值型 (numeric):表示实数,例如 1, 3.14。
整型 (integer):表示整数,例如 1L,这里的 L 表示这是一个整数。
字符型 (character):表示文本字符串,例如 "Hello", "World"。
逻辑型 (logical):表示布尔值,只有两个可能的值:TRUE 和 FALSE。
复数型 (complex):表示复数,例如 1 + 2i。
2.4.2向量
向量是一维数组,可以存储相同类型的元素。向量可以通过 c() 函数创建:
vector <- c(1, 2, 3, 4, 5) # 数值型向量
char_vector <- c("apple", "banana", "cherry") # 字符型向量
bool_vector <- c(TRUE, FALSE, TRUE) # 逻辑型向量
2.4.2矩阵
matrix_data <- matrix(1:6, nrow = 2, ncol = 3)
print(matrix_data)
2.4.3数组
数组是多维的向量,可以有任意数量的维度,并且所有元素必须是同一类型。
array_data <- array(1:12, dim = c(2, 3, 2))
print(array_data)
2.4.4列表
列表是存储不同类型的对象的有序集合。列表可以通过 list()
函数创建:
list_data <- list(name = "Alice", age = 30, hobbies = c("reading", "coding"))
print(list_data)
2.4.5因子
因子是一种特殊类型的向量,用于分类数据。因子可以被标记为有序或无序,并且可以节省内存。
factor_data <- factor(c("low", "medium", "high", "low"))
print(factor_data)
2.4.6时间与日期
R支持多种日期和时间数据类型,如日期 (Date
) 和 POSIXct 或 POSIXlt 类型的时间戳。
date_data <- as.Date("2024-01-01")
time_data <- Sys.time()
print(date_data)
print(time_data)
2.4.7空值NULL和数据缺失NA
NULL是一种特殊的值,表示一个不存在的对象或缺失的值。
null_value <- NULL
print(null_value)
NA表示“不可用”或缺失的数据,可以在任何数据类型中出现。
na_value <- NA
print(na_value)
2.4.8无限大INF和NAN
Inf 表示正无穷大,-Inf 表示负无穷大。
inf_value <- Inf
print(inf_value)
NaN 表示“不是一个数”,通常出现在数学运算错误的情况下。
nan_value <- 0/0
print(nan_value)
2.5数据框
数据框是R中最常用的数据结构之一,它类似于数据库表,由行和列组成。每一列代表一个变量,每一行代表一个观测值。
2.5.1数据框的创建
数据框可以通过data.frame函数来创建,该函数接收一系列向量作为参数,这些向量的长度应该相同,代表数据框中的列。每个向量可以有不同的数据类型。
# 创建一个数据框
df <- data.frame(
name = c("Alice", "Bob", "Charlie"),
age = c(25, 30, 35),
gender = factor(c("Female", "Male", "Male")), # 因子类型
height = c(165, 175, 180), # 数值类型
stringsAsFactors = FALSE # 避免将字符串自动转换为因子
)
# 显示数据框
print(df)
2.5.2访问
可以使用多种方式来访问数据框中的元素:
- 按列名访问:df$column_name 或 df[[column_name]]
- 按位置访问:df[, column_index] 或 df[[column_index]]
- 同时访问行和列:df[row_index, column_index]
# 按列名访问
print(df$name) # 访问name列
# 按位置访问
print(df[, 2]) # 访问第二列
# 同时访问行和列
print(df[1, 2]) # 访问第一行第二列
2.5.3修改
可以使用相同的方式修改数据框中的元素:
# 修改name列为大写
df$name <- toupper(df$name)
# 修改特定元素
df$age[2] <- 31 # 将第二行的年龄改为31
2.5.4添加
可以向数据框中添加新的列或行
# 添加列
df$occupation <- c("Engineer", "Doctor", "Artist") # 添加职业列
# 添加行
new_row <- data.frame(
name = "David",
age = 28,
gender = "Male",
height = 178,
stringsAsFactors = FALSE
)
df <- rbind(df, new_row) # 在数据框底部添加一行
2.5.5删除
可以使用负索引来删除数据框中的列或行:
# 删除列
df <- df[, -3] # 删除第三列
# 删除行
df <- df[-4, ] # 删除第四行
2.5.6筛选与排序
可以使用逻辑条件来筛选数据框中的行:
# 筛选年龄大于30的人
selected_rows <- df[df$age > 30, ]
# 排序
sorted_df <- df[order(df$age), ] # 按年龄升序排列
sorted_df_desc <- df[order(df$age, decreasing = TRUE), ] # 按年龄降序排列
2.5.7合并
可以使用merge函数来合并两个数据框,也可以使用rbind或cbind来垂直或水平堆叠数据框。
# 垂直堆叠
df1 <- data.frame(name = "Eve", age = 22, stringsAsFactors = FALSE)
df <- rbind(df, df1)
# 水平堆叠
df2 <- data.frame(hobby = c("Coding", "Reading", "Painting", "Gaming"), stringsAsFactors = FALSE)
df <- cbind(df, df2)
2.5.8聚合和汇总
可以使用aggregate函数或tapply函数来进行数据框的聚合和汇总。
# 按性别汇总平均年龄
agg_result <- aggregate(age ~ gender, data = df, FUN = mean)
print(agg_result)