chapter3 向量
y <- matrix(c(1,2,3,4),ncol = 2)#按列存储,可用byRow= TRUE,按行排列
- 矩阵的运算和索引:类似向量
- 矩阵筛选
#判断条件返回的是布尔类型
#which()函数返回的是元素的位置
对矩阵行列调用函数
apply(), tapply(),lapply()
apply()
apply(m,dimcode,f,fargs)
- m矩阵
- dimcode,1,按行操作,2,按列操作
- f 应用函数
- fargs f的可选参数集
z<- matrix(c(1,2,3,4,5,6),ncol = 2)
> z
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> f<-function(x) x/c(2,8)
> y<-apply(z,1,f)
> y
[,1] [,2] [,3]
[1,] 0.5 1.000 1.50
[2,] 0.5 0.625 0.75
> y<-t(apply(z,1,f))
> y
[,1] [,2]
[1,] 0.5 0.500
[2,] 1.0 0.625
[3,] 1.5 0.750
增加或删除矩阵行列
类似向量,可通过重赋值的方法
- cbind()
- rbind()
注意:创建向量/矩阵很耗时间,若在循环中重复创建矩阵,浪费很多时间,可以先定义好一个大的空矩阵,在循环中逐行/逐列赋值,或者删减
避免意外降维
此时r是一个向量,而非1x2矩阵,使用drop = FALSE,避免意外降维
> y<-(c(1,2,3,4,5,6),ncol = 2)
> y
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> r<-y[2,]
> r
[1] 2 5
> r<-y[2,,drop= FALSE]
> r
[,1] [,2]
[1,] 2 5
命名
- colnames(),rownames()
chapter4列表
- 创建列表
j<-list(name = "Joe",salary=5000,union= T)
#列表也是向量,也可以用vector()创建
> z<-vector(mode = "list")
> z[["abc']] <-3
> z
$abc
[1] 3
列表的常规操作
- 三种方法访问lst中的组件c,返回的是c的数据类型
lst$c
lst[["c"]]
lst[[i]],i 是c在list中的数字编号
- 单中括号,返回列表
列表删减
z$c <- "sailing"
#使用索引
z[[4]] <-28
z[5;7]<-c(1,2,3)
#删除
z$b <-NULL
#拼接
c(lst,list(5))
访问列表元素
length(j)#返回组件个数
names(j)#返回组件各名称
unlist()#获取列表的值,通常是字符串向量
优先级排序,NULL 数据框是每个组件长度都相等的列表 -apply()
chapter5 数据框
d[[1]]
d$kids
d[,1]
#提取子数据框
d[2:5,2,drop = FALSE]#创建数据框,drop=FALSE,得到一个数据框
na.rm = TRUE#忽略缺失值
subset()#无需设定na.rm=TRUE
complete.cases()#从数据框中去掉含有一个意思NA的观测
rbind(d,list("Laura",19))#添加新行使用数据框or列表的形式
-merge()#合并数据框merge(d1,d3,by.x = "kids",by.y="pals")#在两个数据框中,名称不同意义一样,合并在一起