编写脚本的时候经常会涉及到对data.frame或matrix类型数据的操作,比如取指定列、取指定行、排除指定列或行、根据条件取满足条件的列或行等。在R中,这些操作都是可以通过简单的一条语句就能够实现的,非常的简洁优美~


下面就是一个小小的总结:

1. 对data.frame或matrix取指定行

data[i,] #取data中的第i行

data[c(i,j,k),] #取data中的第i,j,k行


取指定列的操作同理可得


2. 对data.frame或matrix删除指定行

data[-i,] #排除data中的第i行

data[c(-i,-j,-k),] #排除data中的第i,j,k行


3. 根据条件取满足条件的行

例如:

假定data为data.frame类型,第一列列名为type,取type为I的所有行:

data[data$type=='I',]


假定data为matrix类型,取第一列为I的所有行:

data[data[,1]=='I',]


*******************************************************************

2:无名称的数据框

2.1建立:

> tmp_frame<-data.frame(c(1:10),c(1),c(10:1));tmp_frame

c.1.10. c.1. c.10.1.

1   1   1 10

2   2   1  9

3   3   1  8

4   4   1  7

5   5   1  6

6   6   1  5

7   7   1  4

8   8   1  3

9   9   1  2

10 10 1  1

默认左侧是列序号,不足的项使用重复项列出(不是0)

2.2数据索引-无名称:

============点==========================

2.2.1 直接读取点数据

> tmp_frame[10,1]

[1] 10

===========行===========================

2.2.2 读取1行并产生数据框

> tmp_frame[3,](一个1行3列的数据框)

c.1.10. c.1. c.10.1.

3 3 1 8

2.2.3 读取n行并产生数据框

> tmp_frame[1:3,](是3行3列的数据框。依据行读取部分)

c.1.10. c.1. c.10.1.

1 1 1 10

2 2 1 9

3 3 1 8

===========列==========================

2.2.4 读取1列并产生数据框

tmp_frame[1](是1行10列的数据框)

c.1.10.

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 10

2.2.5 读取n列并产生数据框

> tmp_frame[1:2](是10行2列的数据框。依据列读取部分)

c.1.10. c.1.

1 1 1

2 2 1

3 3 1

4 4 1

5 5 1

6 6 1

7 7 1

8 8 1

9 9 1

10 10 1

2.2.6 读取1列并产生向量

> tmp_frame[,1]

[1] 1 2 3 4 5 6 7 8 9 10

(注意tmp_frame[,1:2]和tmp_frame[1:2]一样,均是数据框)

> tmp_frame[1:3,3]

[1] 10 9 8

===========列序号地址================

2.2.7which函数

> which(tmp_frame[,3]==9)(向量tmp_frame[,3]等于9的序号地址—一个则是点数据)

[1] 2

> which(tmp_frame[,2]==1)(向量tmp_frame[,2]等于1的序号地址—多个则是向量)

[1] 1 2 3 4 5 6 7 8 9 10

> tmp_frame[which(tmp_frame[,3]==9),1](行为tmp_frame的第3列等于9的行,列为1 的点数据)—推荐

[1] 2

3有名称的数据框

3.1添加名称

定义时,直接定义列名称—推荐

> tmp_frame<-data.frame(a=c(1:10),b=c(1),k=c(10:1));tmp_frame

a b k

1 1 1 10

2 2 1 9

3 3 1 8

4 4 1 7

5 5 1 6

6 6 1 5

7 7 1 4

8 8 1 3

9 9 1 2

10 10 1 1

定义后,再直接定义列名称

> colnames(tmp_frame)<-c(“a1″,”b1″,”k1″);tmp_frame

a1 b1 k1

1 1 1 10

2 2 1 9

3 3 1 8

4 4 1 7

5 5 1 6

6 6 1 5

7 7 1 4

8 8 1 3

9 9 1 2

10 10 1 1

定义后,再直接定义行名称

> rownames(tmp_frame)<-c(“row1″,”row2″,”row3″,”row4″,”row5″,”row6″,”row7″,”row8″,”row9″,”row10″);tmp_frame

a1 b1 k1

row1 1 1 10

row2 2 1 9

row3 3 1 8

row4 4 1 7

row5 5 1 6

row6 6 1 5

row7 7 1 4

row8 8 1 3

row9 9 1 2

row10 10 1 1

3.2数据索引

3.2.1读取列组成向量—推荐

> tmp_frame$a1

[1] 1 2 3 4 5 6 7 8 9 10

3.2.2读取点数据

> tmp_frame$k1[4](是4行3列的点数据)—推荐

[1] 7

> tmp_frame[4,]$k1(是4行3列的点数据)

[1] 7


4数据框扩展

4.1行扩展

> rbind(tmp_frame,c(2,5,9))

a1 b1 k1

row1 1 1 10

row2 2 1 9

row3 3 1 8

row4 4 1 7

row5 5 1 6

row6 6 1 5

row7 7 1 4

row8 8 1 3

row9 9 1 2

row10 10 1 1

11 2 5 9

> rbind(tmp_frame,row11=c(2,5,9))

a1 b1 k1

row1 1 1 10

row2 2 1 9

row3 3 1 8

row4 4 1 7

row5 5 1 6

row6 6 1 5

row7 7 1 4

row8 8 1 3

row9 9 1 2

row10 10 1 1

row11 2 5 9

4.2列扩展

> cbind(tmp_frame,k11=c(2,5,9,1:7))

a1 b1 k1 k11

row1 1 1 10 2

row2 2 1 9 5

row3 3 1 8 9

row4 4 1 7 1

row5 5 1 6 2

row6 6 1 5 3

row7 7 1 4 4

row8 8 1 3 5

row9 9 1 2 6

row10 10 1 1 7