首页 > 代码库 > R语言之数据处理

R语言之数据处理

一、向量处理

1.选择和显示向量
data[1]
data[3]
data[1:3]
data[-1]:除第一项以外的所有项
data[c(1,3,4,6)]
data[data>3]
data[data<5|data>7]:小于5或大于7的所有项
which(data =http://www.mamicode.com/= max(data)):显示数值最大的那个项序号
data[seq(1,length(data),2)]:每隔一段取出特定值,1为从第一项开始,length(data)表示到向量的最后一项结束,2表示间隔两项

2.向量的排序

sort()函数可以为向量排序,默认为升序,选项na.last默认为去掉NA项,TRUE为包含NA并放置最后,FALSE为包含NA并放置最前面,对于重复数值,sort采取的是并列排序的方式
sort(data,na.last = NA)
sort(data,na.last = TRUE)
sort(data,na.last = FALSE)


order()函数,获得向量的排序号,选项na.last默认为TRUE包含NA并将其放置最后,NA为不包含NA项,FALSE为包含NA并放置最前面
oder(data,na.last = NA)
order(data,na.last = TRUE)
order(data,na.last = FALSE)


rank()函数,也是向量排序函数,和sort()不同,对于重复数值,rank不会并列,而且采用其他方式,默认为采取去平均数。选项ties.method为处理重复数值的方式,na.last为处理NA值的方式,keep为保留NA值
rank(data,ties.method=average,na.last="keep")

3.向量返回逻辑值

直接使用向量进行等号判断即可,如
> data =http://www.mamicode.com/= 100
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE


二、矩阵和数据框处理

1.选择和显示矩阵或数据框

和向量一样,选择矩阵和数据框也可以使用[],但是需要指定行和列,通用格式为
object[row,column]

data[3,3]:选择第三行第三列的数据
data[3,1:4]:选择第三行和1-4列的数据
data[1:2,1:3]:选择第1-2行、第1-3列的数据
data[,1]:选择第一列的全部数据,以向量形式返回
data[1,]:选择第一行全部数据
data[1]:对于数据框,显示第一列的数据,以列表形式返回,对于矩阵,将视为索引号,显示索引号对应的值。
data[c(1,3,5,7),]
data[c(1,3,5,7).-4]:选择1,3,5,7行、除第四列以外的所有值。
data[c(1,3,5,7),"列名"],选项1,3,5,7行,和某列的值

索引号:矩阵的索引方式是从第一列第一行开始,依次读取每一列,可用test.matrix

2.矩阵和数据框的排序

和向量一样,也使用sort、order、rank函数进行排序,但是sort可用对整个矩阵排序,但是不能对整个数据框排序,应用数据框的时候,应选择其中一部分进行。

三、列表的处理

列表经常存放不同结构的数据,因此在处理列表数据前,应先查看一下列表内容的数据结构,使用str函数进行查看


1.选择和显示列表数据

data[1]:选择列表中的第1个元素

2.列表的排序

只能对列表中的某个元素进行排序,而且要使用$符号进行选择

sort(data$one):对data列表中的one元素进行排序


四、数据对象的基本操作

1.查看及设置行和列名
names():可以得到数据对象行和列的名称,可用于列表和数据框,对矩阵无效

row.names()和colnames():可得到数据对象行或列的名称,可用于数据框和矩阵,对列表无效

dimnames():可得到数据对象行和列的名称,先显示行名,后显示列名,对数据框和矩阵有效,对列表无效,因为列表并没有行和列。

可同时使用上述函数对名称进行设置


2.行列转置

可使用t()函数进行行列转置,无论之前是何种数据结构,转置之后均变为矩阵结构。

五、构造数据对象

1.构造列表

将不同数据结构的对象合并在一起的唯一方式是使用列表,创建列表用list()函数。

2.构造数据框
构造数据框使用data.frame()函数,数据框是数据列的集合,数据列可以是数值类型和文本类型,如果是文本类型,数据框将其视为因子,数字格式如果长度不同,则会以NA补齐。


3.构造矩阵

cbind():将向量组成矩阵的列
rbind():将向量组成矩阵的行
如果向量中既有数字也有字符,那么数字将会被转换为字符


此外,一般都是有matrix()函数,matrix(data,nrow=2),必须指定正确的行或列数,也就是说行货列能够被数据个数整除,否则会报错

六、数据对象的转换

as.data.frame():转换为数据框
as.character():转换为因子
as.matrix():转换为矩阵
as.list():转换为列表
as.table():转换为表格

可以通过is.函数判断数据对象的类型,如:is.data.frame判断,返回的是逻辑值。也可以通过class()函数,直接返回数据对象类型。

列表的转换比较麻烦,最好是先转为数据框再转为其他,数据框不能直接转换为表格,需要先转换为矩阵,再转换为表格。

stack()函数对于转换数据框有特别的用处,因为它可以创建一列数值和一列因子的数据框形式。unstack是它的反向操作

此外,stack()函数还可以加入一些选项,得到更多的效果

例如,有数据框data如下:
  height    plant water
1       9 vulgaris    lo
2      11 vulgaris    lo
3       6 vulgaris    lo
4      14 vulgaris   mid
5      17 vulgaris   mid
6      19 vulgaris   mid
7      28 vulgaris    hi
8      31 vulgaris    hi
9      32 vulgaris    hi
10      7   sativa    lo
11      6   sativa    lo
12      5   sativa    lo
13     14   sativa   mid
14     17   sativa   mid
15     15   sativa   mid
16     44   sativa    hi
17     38   sativa    hi
18     37   sativa    hi

有三列数据,一列数值两列因子,我们可做如下操作

> unstack(data,form=height~plant)
  sativa vulgaris
1      7        9
2      6       11
3      5        6
4     14       14
5     17       17
6     15       19
7     44       28
8     38       31
9     37       32

> unstack(data,form=height~water)
  hi lo mid
1 28  9  14
2 31 11  17
3 32  6  19
4 44  7  14
5 38  6  17
6 37  5  15

> cc<-unstack(data,form=height~water)
> stack(cc,select = c(hi,lo))
 values ind
1      28  hi
2      31  hi
3      32  hi
4      44  hi
5      38  hi
6      37  hi
7       9  lo
8      11  lo
9       6  lo
10      7  lo
11      6  lo
12      5  lo

R语言之数据处理