R语言学习笔记-数据操作

来源:互联网 发布:超人预算软件 编辑:程序博客网 时间:2024/05/16 00:58

1、截取数据的一部分

在统计分析时,如果希望用观测数据的一部分来进行计算分析,该怎么做呢?

一个办法是用类似访问数组索引的方式,根据索引范围来截取,例如,对一组cpu利用率数据取前6个值:

> cpu1 [1]   0.0   0.0   0.0   0.0   0.0   6.1   3.0  10.5 -10.6  -1.4   5.9   0.1[13]   9.0 -15.1  -1.5   6.1   7.5  -6.0  -3.1   9.2  -6.2   3.1  -1.5   3.0[25]  -2.9   4.4  -7.5  10.4 -15.0   4.6  -4.5  15.0 -10.5  -4.6   9.0   1.6[37]  -1.5  -4.5   4.6  -3.1   4.5  -7.6  16.7 -21.2  15.1   4.6 -13.6   3.1[49]  -1.7   3.1  -4.6   0.0  24.3 -21.3  -2.9  12.1  -4.6  -4.6  -5.8   3.0[61]  -3.0  -9.2   7.4   9.2   0.2  -7.7  15.2 -18.3  12.1  -1.5  -6.1   1.6[73]   0.0  -1.5   3.2  -1.7  -3.0  12.2  -1.7  -9.0  -3.1  -1.5   7.5   3.1[85]   3.0  -0.2  -2.8   0.0   2.9   4.7  -5.9   4.4  -4.6  -6.1   0.3 -12.3> cpu1[1:6][1] 0.0 0.0 0.0 0.0 0.0 6.1> cpu1[0:6][1] 0.0 0.0 0.0 0.0 0.0 6.1

2、排序

> patientID
[1] 1 2 3 4
> order(patientID)
[1] 1 2 3 4

正序排序(由小到大)
> order(-patientID)
[1] 4 3 2 1
> 倒序排序(由大到小)

3、数据剔除

数据剔除使用方括号进行操作。

> patientdata
  patientID age   status
1         1  25     Poor
2         2  34 Improved
3         3  28     Poor
4         4  52 Improved

(1)使用减号去除

根据列号剔除指定列序号的列。

> patientdata[c(-1)]
  age   status
1  25     Poor
2  34 Improved
3  28     Poor
4  52 Improved

去除第1列,使用减号,表示去除。

(2)使用逻辑!去除

根据名称剔除指定列名的列。
> patientdata
  patientID age   status
1         1  25     Poor
2         2  34 Improved
3         3  28     Poor
4         4  52 Improved
> myvars<-names(patientdata) %in% c("age")
> myvars
[1] FALSE  TRUE FALSE
> patientdata[!myvars]

4、选入观测

选择要分析的数据列。对数据框、矩阵、数组有效。

(1)利用列号选入

> patientdata
  patientID age   status
1         1  25     Poor
2         2  34 Improved
3         3  28     Poor
4         4  52 Improved
> patientdata[1:3]
  patientID age   status
1         1  25     Poor
2         2  34 Improved
3         3  28     Poor
4         4  52 Improved
> patientdata[1:2]
  patientID age
1         1  25
2         2  34
3         3  28
4         4  52
> patientdata[1:2,]
  patientID age   status
1         1  25     Poor
2         2  34 Improved
>
注意:逗号前为行下标,逗号后为列下标,再如:

> patientdata[1:3,1:3]
  patientID age   status
1         1  25     Poor
2         2  34 Improved
3         3  28     Poor

(2)利用条件选入

例1:

类似SQL语句进行查询,不得不说R语言特别强大。

> patientdata[which(age>30),]
  patientID age   status
2         2  34 Improved
4         4  52 Improved
>

说明:结果未选取年龄大于30岁的数据,方括号中逗号前为行条件,逗号后为列条件。

例2:

条件选择的等于符号为“==”,而不是“=”。条件

> patientdata
  patientID age   status
1         1  25     Poor
2         2  34 Improved
3         3  28     Poor
4         4  52 Improved
> patientdata[which(status="Poor"),]
Error in which(status = "Poor") : 参数没有用(status = "Poor")
> patientdata[which(status=="Poor"),]
Error in which(status == "Poor") : 找不到对象'status'
> patientdata[which(patientdata$status=="Poor"),]
  patientID age status
1         1  25   Poor
3         3  28   Poor
>
> patientdata[which(patientID=="Poor"),]
[1] patientID age       status   
<0 行> (或0-长度的row.names)
注意:status可能和系统变量冲突,需要加前缀patientdata$才能正常运行。

(3)利用subset函数选入

> subset(patientdata,age>30)
  patientID age   status
2         2  34 Improved
4         4  52 Improved
> subset(patientdata,age>30,)
  patientID age   status
2         2  34 Improved
4         4  52 Improved
> subset(patientdata,age>30 & age<50)
  patientID age   status
2         2  34 Improved
> subset(patientdata,age>30 & age<50,select=c(age,status))
  age   status
2  34 Improved
>
说明:第1个参数为待操作变量,第2个参数为过滤条件,select参数为选取的列名。

(4)随机取样

随机取样为抽取行数据,当然也可以选用哪些列参与分析。

> patientdata[sample(1:nrow(patientdata),3,replace=TRUE),]
  patientID age   status
3         3  28     Poor
4         4  52 Improved
1         1  25     Poor
>

说明:随机选取3行数据,第2个数据为选取行数;1:nrow(patientdata)为行号范围

A.行列统计函数

> nrow(patientdata)
[1] 4

结果为行数。

> ncol(patientdata)
[1] 3

结果为列数。

B.采样函数sample

随机选取指定数量的行(行索引)。

> str(sample(1:nrow(patientdata),3,replace=TRUE))
 int [1:3] 3 2 2
> str(sample(1:nrow(patientdata),3,replace=FALSE))
 int [1:3] 1 3 2
> str(sample(1:nrow(patientdata),3,replace=FALSE))
 int [1:3] 4 2 1
> str(sample(1:nrow(patientdata),3,replace=FALSE))
 int [1:3] 2 1 4
> str(sample(1:nrow(patientdata),3,replace=FALSE))
 int [1:3] 2 3 4
> str(sample(1:nrow(patientdata),3,replace=FALSE))
 int [1:3] 3 2 1
> str(sample(1:nrow(patientdata),3,replace=FALSE))
 int [1:3] 3 4 2
> str(sample(1:nrow(patientdata),3,replace=FALSE))
 int [1:3] 3 1 4
> str(sample(1:nrow(patientdata),3,replace=FALSE))
 int [1:3] 4 1 3
> str(sample(1:nrow(patientdata),3,replace=TRUE))
 int [1:3] 2 4 4
> str(sample(1:nrow(patientdata),3,replace=TRUE))
 int [1:3] 4 1 2
> str(sample(1:nrow(patientdata),3,replace=TRUE))
 int [1:3] 1 2 2
>
结果为随机采样到的行号,replace为放入采样,可见,当设置replace为TRUE时,样本重复的几率较大。

C.which函数

返回满足条件的行号。

> patientdata
  patientID age   status
1         1  25     Poor
2         2  34 Improved
3         3  28     Poor
4         4  52 Improved
> which(patientdata$age>30)
[1] 2 4
结果返回年龄大于30的行号。

0 0