0. 开篇 这一系列是我学习R基础的笔记,它的特点是容易查找,当然也不太严谨。如果是想快速上手,或者喜欢通过多试代码而不是阅读的朋友,可以参考我的笔记。
这里是第一部分,关于R当中5种基础的数据模式 (mode):vector,matrix, factor, list, data frame.
1. 基础数据模式的操作 记录向量(vector)、矩阵(matrix)、因素(factor)、列表(list)和数据框架(data frame)的创建、获取子集以及基本运算。
1.1 向量(vector)
1.1.1 创建
# 创建一个数值向量和一个文本向量
c(1,2,3,4)
c("a","b","c")
# 会自动将向量内数据强制转换为同一类型
> c(1,"a",2,3)
[1] "1" "a" "2" "3"
1.1.2 命名(标签)
# 利用names()
suits <- c("hearts","spades","diamonds","clubs")
remain <- c(11,12,11,13)
names(remain) <- suits
# 创建时命名
remain <- c(hearts = 11, spades = 12, diamonds = 11, clubs = 13)
1.1.3 取子集
# 序列
remain[c(1,4)]
# 反取
remain[-c(1,4)]
# 名称
remain[c("spades","clubs")]
# 逻辑(会循环取)
remain[c(TRUE,FALSE)]
【学习笔记|R语言入门学习笔记1——5种数据模式(vector,matrix, factor, list, data frame)】在接下来的其它数据模式中,都可以取以上4种方式取子集,举一反三,不再赘述。
1.1.4 运算
对向量进行加减乘除、逻辑等基本运算,都会对其中每个元素进行运算(element-wide),返回一个向量。这一原则同样适用于接下来提到的其它数据模式。
另外一些基本的运算函数:
#平均值
mean(remain)
# 求和
sum(remain)
# 标准差
sd(remain)
1.2 矩阵(matrix) 1.2.1 创建
# 四种结果一致
mtrx <- matrix(1:6, nrow=2)
mtrx <- matrix(1:6, ncol=3)
mtrx <- cbind(1:2,3:4,5:6)
mtrx <- rbind(seq(1, 5, by = 2),seq(2, 6, by = 2))
# 默认按列放置元素,可以用byrow改变
mtrx <- matrix(1:6,nrow = 2, byrow = TRUE)
1.2.2 命名(标签)
# 利用rownames和colnames
rownames(mtrx) <- c("row1","row2")
colnames(mtrx) <- c("col1","col2","col3")
# 创建时命名
mtrx<-matrix(1:6,nrow=2,
dimnames = list(c("row1","row2"),
c("col1","col2","col3")))
1.2.3 取子集
# 取第2行第2列的元素
mtrx[2,2]
# 取按列数第4个元素,返回值同上一行
mtrx[4]
# 取1、2行和1、3列得新矩阵
mtrx[c(1,2),c(1,3)]
# 以上方法使用名称和逻辑量同理
1.2.4 运算
# 每行求和得向量,列同理使用户colSums(),rowMeans同理
sum_of_rows_vector <- rowSums(mtrx)
1.3 因素(factor) factor用于容纳一系列的类别数据(categorical),可以是无序的(血型),或是有序的(衣服尺码)。
1.3.1 创建
# 先准备一个向量
blood <- c("B","AB","O","A","O","O","A","B")
# 创建factor,默认levels按字母顺序
blood_factor <- factor(blood)
# 自定义levels的顺序
blood_factor2 <- factor(blood,levels<-c("O","A","B","AB"))
1.3.2 命名(标签)
# 给levels命名
levels(blood_factor2) <- c("BT_O","BT_A","BT_B","BT_AB")
# 创建时命名
factor(blood,
levels <- c("O","A","B","AB"),
labels = c("BT_O","BT_A","BT_B","BT_AB"))
1.3.3 排序
# 设置排序
tshirt <- c("M","L","S","S","L")
tshirt_factor <- factor(tshirt,ordered = TRUE,
levels = c("S","M","L"),
labels = c("Small","Medium","Large"))
# 取子集比较
> tshirt[1] > tshirt[5]
[1] TRUE
1.4 列表(list) 1.4.1 创建、命名及扩展
# 两种创建并命名方式
song <- list("Rsome time",190,5,
list(title = "R you on time",duration = 9))
names(song) <- c("title","duration","track","similar")
song <- list(title = "Rsome times",
duration = 190,
track = 5,
similar = list(title = "R you on time",duration = 9))
# 扩展列表,以下两种操作结果不同
c(song,
similar = list(title = "R you on time",duration = 9),
singer = c("M","J"))
c(song,
similar = list(title = "R you on time",duration = 9),
singer = list(c("M","J")))
1.4.2 取子集
1.4.2.0 准备
# 以以上创立的列表song为例,其结构为
> str(song)
List of 4
$ title: chr "Rsome times"
$ duration: num 190
$ track: num 5
$ similar :List of 2
..$ title: chr "R you on time"
..$ duration: num 9
1.4.2.1 取子列表
# 取一个子列表(一个包含一个列表的列表)
song[4]
# 即与下式结果相同
list(similar = list(title = "R you on time",duration = 9))
# 取两行(一个向量和一个列表)构成的子列表
song[c(1,4)]
1.4.2.2 取元素
# 取一个元素
song[[4]]
song$similar
# 与下式结果相同
list(title = "R you on time",duration = 9)
# 取第4元素(列表)中的第一元素(文本)
song[[c(4,1)]]
song[[4]][[1]]
1.5 数据框架(data.frame) 1.5.1 创建和扩展
1.5.1.0 准备
# 准备向量
name <- c("A","B","C")
age <- c(28,30,21)
child <- c(FALSE,TRUE,TRUE)
1.5.1.1 创建
# 两种方法创建
df <- data.frame(name,age,child)
names(df) <- c("Names","Age","Child")
df <- data.frame(Name = name,Age = age,Child = child)
1.5.1.2 扩展
# 三种扩展方法
height <- c(180,175,177)
df$Height <- height
df[["Height"]] <- height
df <- cbind(df, Height = height)
1.5.2 取子集
一个data.frame既可以看做matrix,也可以看做list,所以可以用两者的一些方法取子集。接下来以上面创立的df为例:
1.5.2.1 用matrix的方法
# 取单个元素
df[2,3]
# 取一个子data.frame
df[c(1,3),c(FALSE,TRUE)]
# 单独取一行会返回list
df[-c(1,3),]
# 取一列会返回vector或者factor (对于text)
df[,c(TRUE,FALSE,FALSE,FALSE)]
1.5.2.2 用list的方法
# 取一个子data.frame
df["Age"]
df[2]
# 取一个vector或者factor
df[["Age"]]
df[[2]]
1.5.2.3 其它取子集方法
# 运用subset函数
subset(df,subset = Child == TRUE)
subset(df,subset = Child == TRUE & Age > 25)
# Alternatively,实际用到了逻辑取子集的方法
df[df$Child == TRUE,]
df[df$Child == TRUE & df$Age > 25,]
1.5.3 排序
# 将年龄升序排序
sort(df$Age)
# 得每一行的升序/降序排名构成的向量
ranks1 <- order(df$Age)
ranks2 <- order(df$Age,decreasing = TRUE)
# 将list重新排列
df[ranks1,]
df[ranks2,]
1.6 查看、转换mode和一点其它
# 查看mode,单个是数值也是向量 is.anymode()
> is.vector(3)
[1] TRUE
# 查看长度
length(c(1:6))
# 查看维度
> dim(as.matrix(c(1:3)))
[1] 3 1
# 查看结构
str()
# 转换mode as.anymode()
as.matrix(c(1:5))
推荐阅读
- r语言|r语言 新增一列数字类型_R语言实战之R语言基础语法精讲(一)
- R语言从入门到机器学习|R语言对dataframe的行数据进行排序(Ordering rows)实战(使用R原生方法、data.table、dplyr等方案)
- R语言入门课|R语言使用reshape包的rename函数修改数据变量的名称、例如、使用rename函数自定义修改dataframe数据列的名称
- R语言入门课|R语言使用dim函数查看数据维度、例如、使用dim函数查看dataframe数据有多少行多少列
- R语言|R语言(Newton法、似然函数)
- Prometheus|PromQL 计算Counter指标增长率 rate irate increase
- R语言|R语言Kmeans聚类分析
- 数据分析之Matplotlib模块学习笔记(一)
- R语言|R语言(五) Plotly绘图基本命令介绍