R语言学习笔记 note2

二. Factor 因子

1.创建一个factor,观察因子水平
gender = c("Male", "Male", "Female", "Female", "Male", "Female") # 字符向量
factor_gender = factor(gender) # 转换为因子,添加levels =c()可以自定义因子水平
levels(factor_gender) # 因子水平,结果为"Female" "Male"  
levels(factor_gender) = c("女", "男")  # 更改因子水平
as.numeric(factor_gender) # 将因子转换为用数字表示
summary(factor_gender) # 统计每个因子出现次数
2.有序因子
ordered_factor_gender = factor(gender, levels=c("男","女"), ordered=TRUE)
ordered_factor_gender # 将因子排列,结果为 Levels: 男 < 女

习题

Q1:创建一个字符向量, 元素是: gorilla,elephant,ant。

v1 = c("gorilla", "elephant", "ant")

Q2:基于Q1中的v1字符向量创建一个无序因子向量, 三个因子水平按照字母顺序排列。

v2 = factor(v1)

Q3:基于Q1中的v1字符向量创建一个有序因子向量, 三个因子水平按照体重从小到大排列。

v3 = factor(v1, levels = c("ant","gorilla","elephant",ordered = TRUE)

三.Matrix 矩阵

1.创建一个矩阵

R中的matrix是一种二维的对象,矩阵里面的元素必须是同一种数据类型的(numeric, character, logical)。

mat1 = matrix(1:6, nrow=3, ncol=2) # 创建一个1按列排列的3行2列的矩阵
matrix(1:6, nrow=3) # 数值确定,行或列数确定就可以确定一个矩阵
mat2 = matrix(1:6, nrow=3, byrow=TRUE) # 按行排列
matrix(rep(0, 8), nrow=4, ncol=2) # rep(0,8):创建8个0
matrix(0, nrow=4, ncol=2)
matrix(letters, ncol=2) # 字符矩阵
2.矩阵的name

矩阵是两维的, 所以有rownamescolnames

rownames(mat1) = c("row1","row2","row3") # 设置行名
colnames(mat1) = c("col1","col2") # 设置列名
rownames(mat1) = NULL # 删除行名
colnames(mat1) = NULL # 产出列名
dimnames(mat1) = NULL # 删除行名和列名
3.矩阵的索引和筛选
mat3 = matrix(1:24, nrow=6)
mat3[1,1] # 选取第1行第1列
mat3[2,] # 选取第2行
mat3[,3] # 选取第3列
mat3[1:3, 1:2] # 选取第1-3行和第1-2列
mat3[3:5, c(1,4)] #选取第3-5行和第1列,第4列
mat3[-1,] # 删除第1行
mat3[,-2] # 删除第2列
mat3[-1,-2] # 删除第1行第2列
mat3[7] # 选取第7个元素,默认按列排列
as.vector(mat3) # 将矩阵转换为向量

注意:执行mat3[-1,]这些操作后,mat3并没有改变,必须将索引赋值给mat3后才会改变。

4.矩阵的其他操作
cbind(mat3, 1:6) # 在后增加一列
cbind(1:6, mat3) # 在前增加一列
rbind(mat3, 1:4) # 在后增加一行
rbind(mat3, 0) # 缺的元素会自动用0补齐
mat4 = matrix(6, nrow=3, ncol=4)
rbind(mat3, mat4) # 合并矩阵,增加行数,列数不变
mat5 = matrix(0, nrow=6, ncol=2)
cbind(mat3, mat5) # 合并矩阵,增加列数,行数不变
mat6 = matrix(4:9, nrow=3, byrow=TRUE)
t(mat6) # 矩阵转置
dim(mat6) # 查看矩阵的行数和列数
length(mat6) # 计算矩阵元素个数
mat6 * mat2 # 各个元素对应位置相乘
mat6 %*% t(mat2) # 矩阵乘法

习题

Q1: 创建一个10行5列的矩阵, 其中的元素为1-50,按行排列,并设置行名为row1-row10,列名为col1-col5,将这个矩阵保存为 m1。

m1 = matrix(1:50, nrow = 10, byrow = T)
rownames(m1) = paste("row",1:10,sep="")
colnames(m1) = paste("col",1:5,sep="")

Q2:从 m1 中选择前5行和前3列, 并保存为 m2。

m2 = m1[1:5,1:3]

Q3:从 m1 中选择所有的偶数行和奇数列, 并保存为 m3。

m3 = m1[1:nrow(m1) %% 2 == 0, 1:ncol(m1) %% 2 == 1]

Q4:按行合并 m2 和 m3, 并保存为m4, 观察m4的rownames和colnames。

m4 = rbind(m2, m3)
m4

Q5:计算 m4的转置 与 自己的乘积, 记为m5。

m5 = t(m4) %*% m4

Q6:清除 m5 的dimnames。

dimnames(m5) = NULL

Q7:求解下面的方程组:

  • 2x + 3y = 12
  • 6x - 4y = 10
A = rbind(c(2,3), c(6,-4))
b = c(12, 10)
solve(A, b)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值