操纵数据
原始数据—预处理后的数据
基本方法:
[]提取一个或多个类型相同的元素
[[]]从列表或数据框中提取元素
$按名字从列表或数据框中提取元素
> m<-1:10 #R语言数组下标从1开始
> m[1]
[1] 1
> m[5]
[1] 5
> m[1:5]
[1] 1 2 3 4 5
> m[6:10]
[1] 6 7 8 9 10
> m[m>5]
[1] 6 7 8 9 10
> m>5 #判断
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
> m[m>5&m<7]
[1] 6
> m[m<3 |m>7]
[1] 1 2 8 9 10
>names(y)<- c("a","b","c","d")
> y
a b c d
1 2 3 4
> y[2]
b
2
> y["b"]
b
2
> n <- matrix(1:6,nrow=3,ncol=2)
> n
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> n[1,2] #[行,列]
[1] 4
> n[1,]
[1] 1 4
> n[,1]
[1] 1 2 3
> n[c(1,2),1] #取到第一,二行,第一列的元素
[1] 1 2
> class(n[1,2])
[1] "integer" #返回向量
> n[1,2,drop=FALSE] #关掉返回向量,返回矩阵
[,1]
[1,] 4
#数据框子集
df <-data.frame(id=c(1,2,3,4),name=c("a","b","c","d"))
> df
id name
1 1 a
2 2 b
3 3 c
4 4 d
> df$id
[1] 1 2 3 4
> df$id[c(2,4)] <- NA #缺失值
> df
id name
1 1 a
2 NA b
3 3 c
4 NA d
> df <-data.frame(id=c(1,2,3,4),id2=c(5,6,7,8),name=c("a","b","c","d"))
> df
id id2 name
1 1 5 a
2 2 6 b
3 3 7 c
4 4 8 d
> df[(df$id>2 & df$id2>6),]
id id2 name
3 3 7 c
4 4 8 d
> subset(df,df$id>3)
id id2 name
4 4 8 d
构建子集
列表子集
[[]]/$/[[]][]/[[]][[]]
嵌套列表/不完全匹配
> mm <- list(id=1:4,height=170,gender="male")
> mm
$id
[1] 1 2 3 4
$height
[1] 170
$gender
[1] "male"
> mm['id']
$id
[1] 1 2 3 4
> mm[1]
$id
[1] 1 2 3 4
> mm[[1]] #只拿到内容
[1] 1 2 3 4
> mm[[1]]
[1] 1 2 3 4
> mm[['id']]
[1] 1 2 3 4
> mm$id
[1] 1 2 3 4
> mm[c(1,3)]
$id
[1] 1 2 3 4
$gender
[1] "male"
> y<-"id"
> mm[[y]]
[1] 1 2 3 4
> mm$id
[1] 1 2 3 4
> mm$y
NULL
#如何从列表中获取嵌套的元素
> nn<-list(a=list(1,2,3,4),b=c("monday","tuesday"))
> nn #a本身也是列表
$a
$a[[1]]
[1] 1
$a[[2]]
[1] 2
$a[[3]]
[1] 3
$a[[4]]
[1] 4
$b
[1] "monday" "tuesday"
> nn[[1]][[2]]
[1] 2
> nn[[1]][2] 子列表中的第二个元素
[[1]]
[1] 2
#获取嵌套列表中的元素
> nn[[c(1,3)]] #列表中第一个元素中的第三个元素
[1] 3
> nn[[c(2,2)]] #列表中第二个元素中的第二个元素
[1] "tuesday"
#不完全匹配
> l<-list(adfasdfasd=1:10)
> l$a
[1] 1 2 3 4 5 6 7 8 9 10
> l[["a"]]
NULL
> l[["a",exact=FALSE]]
[1] 1 2 3 4 5 6 7 8 9 10
处理缺失值
ff<-c(1,NA,2,NA)
> ff[!is.na(ff)] #获取不是缺失值的元素
[1] 1 2
ff1<-c(1,NA,2,NA,3)
ff2<-c("a","b",NA,NA,"c")
z<-complete.cases(ff1,ff2)
> ff1
[1] 1 NA 2 NA 3
>
> ff2
[1] "a" "b" NA NA "c"
> z
[1] TRUE FALSE FALSE FALSE TRUE
library(datasets) #数据集
head(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)) 去缺失值
> 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