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] 2 3
Levels: 2 3 4
factor(1:3,levels=2:4,labels=c(“a”,“b”,“c”))
[1] a b
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相同。没有名字时,按顺序添加,有名字时按名字对应,但不能有名字但不同。增加列时,最好给列表的元素命名,或向量给与标识符或数组和矩阵给列名。
修改 根据索引修改
删除 使用负值索引
上一页
下一页