#基本方法
> x<-1:10
> x
[1] 1 2 3 4 5 6 7 8 9 10
> x[1]
[1] 1
> x[5]
[1] 5
> x[1:5]
[1] 1 2 3 4 5
> x[6:10]
[1] 6 7 8 9 10
> x[x>5]
[1] 6 7 8 9 10
> x>5
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[8] TRUE TRUE TRUE
> x[x>5&x<7]
[1] 6
> x[x<3 |x>7]
[1] 1 2 8 9 10
> y<-1:4
> y
[1] 1 2 3 4
> names(y)<-c("a","b","c","d")
> y
a b c d
1 2 3 4
> y[2]
b
2
> y["b"]
b
2
>
#矩阵子集
> x<-matrix(1:6,nrow = 2,ncol = 3)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> x[1,2]
[1] 3
> x[2,3]
[1] 6
> x[1]
[1] 1
> x[1,]
[1] 1 3 5
> x[,1]
[1] 1 2
> x[2,c(1,3)]
[1] 2 6
> class(x[1,2])
[1] "integer"
> #要使其返回矩阵则
> x[1,2,drop=FALSE]
[,1]
[1,] 3
>
#数据框的子集
> x<-data.frame(v1=1:5,v2=6:10,v3=11:15)
> x
v1 v2 v3
1 1 6 11
2 2 7 12
3 3 8 13
4 4 9 14
5 5 10 15
> x$v3[c(2,4)]<-NA
> x
v1 v2 v3
1 1 6 11
2 2 7 NA
3 3 8 13
4 4 9 NA
5 5 10 15
> x[,2]
[1] 6 7 8 9 10
> x[,v2]
Error in `[.data.frame`(x, , v2) : object 'v2' not found
> x[,"v2"]
[1] 6 7 8 9 10
> x[(x$v1<4 & x$v2<8),]
v1 v2 v3
1 1 6 11
2 2 7 NA
> x[x$v1>2,]
v1 v2 v3
3 3 8 13
4 4 9 NA
5 5 10 15
> x[which(x$v1>2),]
v1 v2 v3
3 3 8 13
4 4 9 NA
5 5 10 15
> ?which
> which(x$v1>2)
[1] 3 4 5
> x$v1>2
[1] FALSE FALSE TRUE TRUE TRUE
> subset(x,x$v1>2)
v1 v2 v3
3 3 8 13
4 4 9 NA
5 5 10 15
>
#列表的自己
#符号-[[]]/$/[[]][]/[[]][[]]
> x<-list(id=1:4,height=170,gender="male")
> x
$id
[1] 1 2 3 4
$height
[1] 170
$gender
[1] "male"
> x[1]
$id
[1] 1 2 3 4
> x["id"]
$id
[1] 1 2 3 4
> x[[1]]
[1] 1 2 3 4
> x[["id"]]
[1] 1 2 3 4
> x$id
[1] 1 2 3 4
> x[c(1,3)]
$id
[1] 1 2 3 4
$gender
[1] "male"
> y<-"id"
> x[["id"]]
[1] 1 2 3 4
> x[[y]]
[1] 1 2 3 4
> x$id
[1] 1 2 3 4
> x$y
NULL
> x<-list(a=list(1,2,3,4),b=c("Monday","Tuesday"))
> x
$a
$a[[1]]
[1] 1
$a[[2]]
[1] 2
$a[[3]]
[1] 3
$a[[4]]
[1] 4
$b
[1] "Monday" "Tuesday"
> x[[1]]
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
[[4]]
[1] 4
> x[[1]][[2]]
[1] 2
> x[[1]][1]
[[1]]
[1] 1
> x[[1]][2]
[[1]]
[1] 2
> x[[c(1,3)]]
[1] 3
> x[[c(2,3)]]
Error in x[[c(2, 3)]] : subscript out of bounds
> x[[c(2,2)]]
[1] "Tuesday"
>
#不完全匹配,partial matching
> x<-list(asdfgh=1:10)
> x
$asdfgh
[1] 1 2 3 4 5 6 7 8 9 10
> x$asdfgh
[1] 1 2 3 4 5 6 7 8 9 10
> x$asdfgh
[1] 1 2 3 4 5 6 7 8 9 10
> x$a
[1] 1 2 3 4 5 6 7 8 9 10
> x[["a"]]
NULL
#关上精确匹配
> x[["a",exact=FALSE]]
[1] 1 2 3 4 5 6 7 8 9 10
>
> x<-list(asdfgh=1:10,b=1:2,aaaa=3:5)
> x
$asdfgh
[1] 1 2 3 4 5 6 7 8 9 10
$b
[1] 1 2
$aaaa
[1] 3 4 5
> x$a
NULL
> x$as
[1] 1 2 3 4 5 6 7 8 9 10
>
#缺失值处理
>
> is.na(x)
[1] FALSE TRUE FALSE TRUE FALSE
> x[!is.na(x)]
[1] 1 2 3
#x,y都不是缺失值的选出来
> y<-c("a","b",NA,"c",NA)
> z<-complete.cases(x,y)
> z
[1] TRUE FALSE FALSE FALSE FALSE
> x[z]
[1] 1
> y[z]
[1] "a"
>
#使用R的数据包来看看complete.cases怎样
> library(datasets)
#展示前六行空气质量,数据airquality纽约的空气质量
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
>
#选取都没有缺失值的行
> g<-complete.cases(airquality)
> g
[1] TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
[9] TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
[17] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[25] FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE
[33] FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE
[41] TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
[49] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
[57] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[65] FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
[73] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[81] TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
[89] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
[97] FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
[105] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[113] TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE
[121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[129] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[137] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[145] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
[153] TRUE
> airquality[g,][1:10,]
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
7 23 299 8.6 65 5 7
8 19 99 13.8 59 5 8
9 8 19 20.1 61 5 9
12 16 256 9.7 69 5 12
13 11 290 9.2 66 5 13
14 14 274 10.9 68 5 14
>
#向量化操作
> x<-1:5
> y<-6:10
> y
[1] 6 7 8 9 10
> x
[1] 1 2 3 4 5
> x+y
[1] 7 9 11 13 15
> x*y
[1] 6 14 24 36 50
> x/y
[1] 0.1666667 0.2857143 0.3750000 0.4444444 0.5000000
> x<-matrix(1:4,nrow = 2,ncol = 2)
#rep(2,4)表示打第一个参数,重复4次
> y<-matrix(rep(2,4),nrow=2,ncol=2)
> x*y
[,1] [,2]
[1,] 2 6
[2,] 4 8
> x/y
[,1] [,2]
[1,] 0.5 1.5
[2,] 1.0 2.0
>
#求矩阵乘法
> x %*% y
[,1] [,2]
[1,] 8 8
[2,] 12 12
>