R语言系列:R语言中的对象

R中的处理对象就是数据,每个对象包含多个元素。

所有的对象都有两个内在属性:类型和长度。二者可以通过mode和length得到。
类型包括数值、字符、逻辑、复数等。
长度指的是数据中元素的数目。
无论哪种类型,缺失数据总是用NA表示。
无穷数值使用Inf和-Inf表示正负无穷。
非数字表示为NaN(注意NaN仍为数值型)。

所有数据按结构可分为向量、因子、数组、矩阵、数据框、时间序列和列表。
1、向量是最简单的一类,就是包含一行数字的变量。其他结构都可以看作由若干向量组成。
2、因子是分类变量,也可以看作是带有分类标签的向量。
3、数组是n维的数据表,矩阵是2维数组。
4、数据框由若干向量和或因子组成,但必须等长。数据框与二维数组或矩阵类似,但在数据框中,行与列的意义是不同的,其中的列表示变量,而行表示观测。显示数据框时左侧会显示观测值的序号。
5、列表可以包含任何对象。

向量的下标
1、正整数:如x[c(1,4)]即x中第一个和第四个元素。注意下标从1开始计数,而不是从0开始。
2、负整数:如x[-(1:3)]即去除x中前三个元素。
3、字符串:需要向量中的元素具有names属性。
例:x=1:3; names(x)=c('a','b','c'); x[c('a','c')]
4、条件选取:可在下标中设置条件来选取合适的元素。
例:x=runif(10); x[x<0.5]    #和length联用可用于条件计数,如length(x[x>0.8])
例:x[x %in% y]    #选取x和y相同的元素。x %in% y返回和x等长的一个逻辑值向量

因子的建立:可以使用factor或gl
每一个因子不仅包括若干元素,还包括该因子所有可能的取值水平。
1、factor(x)
用于转换向量为因子,默认将向量中所有不同元素的种类排序后列为因子标签。
例:x=1:4; y=factor(x)    #factor不直接修改x的值
2、gl(k,n,length=,label=)
构造一个因子序列。k为水平数,n为每个水平连续出现的次数,length为整个序列的长度,label为因子标签。
例:gl(3,5,length=20,label=c('a','b','c'))
3、levels用于提取因子中的标签,也可用于修改因子标签。
例:levels(x); levels(x)=2:5
注意:使用levels修改因子标签后,因子中的元素也会发生相应改变。

数组的建立
1、array(data, dim, dimnames)
data为一向量,其元素用于构建数组;dim为数组的维数向量(表明各维所包含的元素个数);dimnames为由各维的名称构成的向量,缺省为空。
例:x=array(1:24, dim=c(3,4,2))
如果data中元素不足于填充整个数组,则会使用循环原则填充数组。
例:x=array(1:5, dim=c(3,4,2))
2、dim可以将向量转为数组
例:y=1:24; dim(y)=c(3,4,2)    #dim直接修改了y的值
注意:dim不能使用循环原则填充,同时注意和factor的区别。
3、dimnames可以对维度进行命名,但必须用列表形式。
例:x=array(1:24, dim=c(3,4,2)); dimnames(y)=list(c('a','b','c'), c('a','b','c','d'), c('a','b'))
4、dim和dimnames也可以用于查看数组的相关属性
例:x=array(1:24, dim=c(3,4,2),dimnames=list(c('a','b','c'), c('a','b','c','d'), c('a','b')));
    dim(x); dimnames(x)

矩阵的建立
1、矩阵可以视为2维数组,因此可用array来建立。
2、matrix是专用的建立矩阵的函数
例:x=matrix(1, nr=2, nc=2); y=matrix(1:4, 3, 4)
注意:循环填充也适用于matrix,但当矩阵所需元素个数不是向量中元素个数的整倍数时,会出现警告信息。
3、对角矩阵可使用diag建立
例:diag(3); diag(1:5); diag(4,3); diag(4,3,5)
4、可用rownames和colnames查看或命名矩阵的行变量名和列变量名。
例:rownames(x); colnames(x)=c('a','b')
注意:dim和dimnames也同样适用于矩阵
5、使用matrix建立矩阵,默认为按列填充,可使用byrow=TRUE进行按行填充。
例:matrix(1:6, 3, 4, byrow=TRUE)
注意:byrow对array和diag无效。

数组和矩阵的下标
1、和向量一样,下标可以选择正整数、负整数、字符串和条件式
例:x=matrix(1:6, 3, 4); x[2,2]; x[c(1,2),c(3,4)]; x[,3]; x[1,]
2、负整数只能去除整行或整列,不能抠去某个元素
例:x[,-2]; x[-1,-2]
3、条件式下标
例:x=matrix(1:20,4);
    x[x>7]    #[1]  8  9 10 11 12 13 14 15 16 17 18 19 20
    x[,x[1,]>2]     #第一行大于2的所有列
    x[x[,2]>7,]    #第二列大于7的所有行,注意此时只有最后一行符合要求,默认返回值为一个向量
    x[x[,2]>7,,drop=F]    #使用drop参数使返回值保持矩阵类型
4、当各维度具有names属性时,可使用字符串下标。
例:x=matrix(1:4,2,2); colnames(x)=c('a','b'); rownames(x)=c('a','b'); x['a','b']
5、避免矩阵的意外降维(注意下标里的逗号)
例:x=matrix(1:6,3)
    y=x[1,]    #此时y成为一个长度为2的向量
    y=x[3,,drop=FALSE]    #此时y为只有一行的矩阵
    y=x[,1,drop=FALSE]    #此时y为只有一列的矩阵

数据框的建立
1、可通过data.frame将若干向量组成数据库,但向量必须有相同的长度或长度有倍数关系,如果其中有一个比其它
的短,它将按循环法则“循环”整数次。
例:x=1:10; y=20:11; z=data.frame(x,y)
2、可以使用colnames或names查看或更改列变量名。rownames可以查看或修改行变量名
3、添加新变量    #向量、数组、矩阵可以使用字符串下标,但不能使用$符号
3.1 直接添加。例:z$a=rnorm(10); z$b=1/x
3.2 使用with。例:z$b=with(z, 1/x)
3.3 使用transform一次添加多个变量。例:z=transform(z, a=1/x, b=1/y)

数据框子集的选择
1、可以使用下标的方式,使用方法与数组下标相同。
2、对于数据框中的列,可直接使用“数据框名$变量名”这种格式指向对应的列。
例:x=1:10; y=20:11; z=data.frame(x,y); z$x
3、使用subset,根据条件选取
例:x=rnorm(10); y=rnorm(10); z=data.frame(x,y); subset(z, x>0 & y<0)

列表的建立
1、使用list,和data.frame相似,但对参数无限制。
例:x=1:20; y=gl(3, 5, length=16); z=diag(4); r=list(x, y, z)
2、使用下标时,注意列表有两级下标。
由于列表可以包含任何元素,因此仅用单层[]难以表达数据位置,因此使用[[i]]表示数据的层级关系。
例:r[[3]][1,1]    #该数据在第二层第一行第一列,第一层第三个元素中。
例:r[[2]][[3]][2,3]    #该数据在第三层第二行第三列,第二层第三个元素,第一层第二个元素中。
双层方括号里也可以放变量名
例:r[['a']][['b']][2,3]    #该数据在第三层第二行第三列,第二层变量b中,第一层变量a中。
3、当建立列表时命名了第一级下标的名称,则可以使用“列表名$变量名”
例:r=list(a=x, b=y, c=z); r$a; r$c[1,]
也可以在建立列表之后再修改names属性
例:names(r)=letters[c(24:26)]
4、实际数据分析时,主要是提取列表部分数据以向量、列表、数组、矩阵或数据框的形式进行分析。

附:
1、查看对象的性质可以使用mode、attributes、typeof、class等函数。
2、使用attr可查看数据结构。
3、利用subset筛选数据(略过NA)
    x=c(1:3,NA)
    x[x>2]    #输出“[1]  3 NA”
    subset(x,x>2)    #输出“[1] 3”
4、利用which获取符合元素的下标
    x=6:10; which(x %% 2 == 0)    #输出“[1] 1 3 5”
5、将列表所有元素转成一个向量
    unlist()

转载于:https://my.oschina.net/explore/blog/79710

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值