R数据对象
向量
创建向量
形式 | 用途 |
---|---|
n1:n2 | n1,n2大小不规定,生成从n1到n2的差为1或-1的等差序列 |
seq(n1,n2,by=n3,length=n4) | 生成从n1到n2的步长为n3或者长度为n4的向量 |
rep(n1,n2) | n1重复n2次的向量 |
rep(c(),n2) | 向量c重复n2次 |
rep(c(),each=n2) | 向量c中的每个元素重复n2次 |
rep(c(),c()) | 前后两个长度必须相等,对应重复n次 |
c() | 直接利用c函数生成无规律的向量 |
scan() | 直接在键盘输入 |
sequence(n1) | 生成从1到n1的向量 |
sequence(c()) | c中每一个元素是一个n,依次生成从1到每一个n的向量,比如sequence(c(2,3))为12123 |
numeric(n) | 生成一个长度为n的零向量 |
数值型向量以上方法都可用
字符型向量 可以用rep,c(),scan()
paste将字符串连接起来,并且设置连接的符号,默认是空格,也可以是空字符串或其他 符号
paste(c1,c2,c3,...sep="?")
paste("a","b")#"a b" paste("a","b",sep="")#"ab" paste("a","b",sep=".")#"a.b" paste(c("a","b"),c(1,2))#"a 1" "b 2" paste(c("a","b"),1)#"a 1" "b 1"
逻辑型向量 可以用rep, c(),scan()
也可以通过比较运算符得出逻辑运算符
复数型向量 可以用rep, c()
向量的索引
R中向量的索引从1开始,既可以取某一个值,也可以取几个连续的或不连续的值。当索引值为负数时,还可以删掉某些值。也可以用比较语句作为索引值.
r$> x=c(1,2,3,4)
r$> x[c(T,T,F,F)] [1] 1 2
r$> x[c(T,F)]#逻辑值长度不够会循环 [1] 1 3
如果向量还有names属性的话,那么可以利用names属性取。
向量的运算
向量与常数的运算
+,-,*,/,sqrt(开方),^(幂),log,exp,sin,比较运算符等都是向量中每个元素与这个常数进行运算。
同等长度的向量运算
相应元素运算
不同长度的向量运算
长度小的向量循环运算
因子
因子是一组具有标签的序列。它用于存储分类类别。因子水平用于限制因子的取值范围。因子中的元素要么是因子水平中的值,要么是缺失值。
可以用factor函数和gl函数生成因子
函数 | 参数 | 实例 |
---|---|---|
factor(x,levels,lables, exclude,ordered,nmax) |
factor(1:3,levels=1:3) [1] 1 2 3 Levels: 1 2 3 factor(1:3,levels=2:4) [1] Levels: 2 3 4 factor(1:3,levels=2:4,labels=c(“a”,“b”,“c”)) [1] Levels: a b c c中元素如果不属于levels,则显示为NA,labels可以改变水平名称。相应的c中元素的显示也会改变。 可以用levels函数查看因子水平或者更改因子水平 |
|
gl(k,n,length,labels,ordered=FALSE) |
length是总长度,n是水平总个数,默认1到n,k是每个水平重复数 |
gl(3,2,12) [1] 1 1 2 2 3 3 1 1 2 2 3 3 Levels: 1 2 3 |
时间序列
start=c(年份,第几个季度/第几个月)
start=c(月份,第几天)
ts(2:10,frequency=4,start=c(2020,2))
Qtr1 Qtr2 Qtr3 Qtr4
2020 2 3 4
2021 5 6 7 8
2022 9 10
数组
创建数组
array(data,dim=c(),dimnames=list(c(),c(),…)"%}},生成数组时默认是按照列排列
可以利用dim,dimnames取出或更改一个数组的维度或维度的名称,更改名称时按照行列第三维的顺序,例如dimnames=list(c(a,b),c(c,d),c(e,f))
还可以用colnames和rownames查看行名和列名.
数组的索引
维度之间用逗号隔开,给与具体的索引值,维度顺序为行列第三维。索引值可以是数字,可以是向量,也可以是二维数组。也可以正负都包括。
x=array(1:24,c(3,4,2))
x[1,2,2]
x[1,c(1,3),c(1,2)]#先看第三个维度,取1时,取了(1,1),(1,3)两个点,然后按列排。取2时,依次顺推。
x[,2,1]#某一维空着表示该维全取。
#x[,,]或x[]表示整个数组
y=array(c(1:3,3:1,c(1,2,2)),c(3,3))#可以用一个二维数组来进行数组的索引。
y
x[y]
矩阵
创建矩阵
使用matrix函数创建矩阵 matrix(data,nrow,ncol,byrow=F,dimnames)
可以设置行数和列数,以及是否按行排,默认按行排;以及设置行列名(必须是列表)。
使用rbind(按行合并)和cbind(按列合并) 可以合并向量,数组,矩阵生成新的矩阵
rbind(x[,,1],x[,,2])
使用数组来生成
矩阵的索引
跟数组基本类似,可以使用正负值,逻辑值等实现子集的提取和修改。
矩阵的运算
函数 | 用途 |
---|---|
t() | 矩阵转置,或者将一个向量变成矩阵 |
diag() | 对矩阵使用提取对角元素,对向量使用生成对角阵,diag(diag(matrix(1:4,2,2)))可以提取一个矩阵的对角元素生成对角阵。 |
dim() | 矩阵维度 |
nrow() | 矩阵行数 |
ncol() | 矩阵列数 |
as.vector() | 矩阵拉直,转换成向量 |
rbind() | 按行合并矩阵 |
cbind() | 按列和并矩阵 |
A*B | 矩阵的逐元乘积,对应位置元素相乘 |
A%*%B | 矩阵的代数乘积 |
det() | 方阵的行列式 |
solve(A) | 矩阵的逆 |
solve(A,b) | 求AX=b的解,b不给时,默认为单位矩阵,所以可以求逆 |
eigen(A) | 求矩阵的特征值和特征向量 可以看到结果会有$values为特征值,$vectors中每一列为对应的特征向量。 |
svd(A) | 对矩阵做奇异值分解 |
列表
列表可以在赋值时人为的给每个参数添加一个name,可以只添加一部分,可以不添加。
列表索引时有三种格式,且每次只能索引一个值
- 如果有name
- list$name
- list[[name]]
- 如果无name
- lsit[[n]](n为下标)
可以通过索引来进行列表的增删改,删除就是令该值为NULL。
子列表索引
result=list(name="Tom",wife="Lucy",csex=c('m','m','f'),cages=c(4,7,9))
result[1]#会返回名字加值这个列表结构
result[[1]]#只会返回值
列表的name属性可以通过names函数查看,无name的元素返回null。也可以通过names函数为list的元素命名。可以只命名前面的一部分。
数据框
创建数据框
方法 | 详情 |
---|---|
利用data.frame函数 | 和列表类似,不过每一个元素的长度必须相同.每一个元素是一列。data.frame(name1=c(),name2=c(),name3=c()...) ,最好给每一个元素赋予一个名称。 |
利用向量 | 先创建相同长度的向量c1,c2,c3…,然后在用data.frame(c1,c2,c3,…)转化成数据框 |
利用列表 | 如果一个列表各元素长度相同,可以用as.data.frame()强制转化为数据框。 |
利用数组 | as.data.frame()转化,没有列名就为v1,v2,v3… |
利用矩阵 | as.data.frame(),列名和数组一样 |
数据框的索引
索引 | 方法 |
---|---|
取某一行 | df[行标,] list |
取某一列 | df[列标] list df[[列标]] numeric df[,1] numeric df[[“列名”]]或df$列名 numeric |
取具体的值 | 先取某一行或某一列,在从行或列里面取 df[r,c] |
数据框的修改
目标 | 方法 |
---|---|
增加 | 使用rbind或者cbind在增加行或列,注意长度相同。增加行时注意name相同。没有名字时,按顺序添加,有名字时按名字对应,但不能有名字但不同。增加列时,最好给列表的元素命名,或向量给与标识符或数组和矩阵给列名。 |
修改 | 根据索引修改 |
删除 | 使用负值索引 |