R语言基础之第二部分:操纵数据取子集
2.1 构建子集
[ ]:提取一个or多个类型相同的元素
[[ ]]:从列表或数据框中提取元素
$ :按名字从列表or数据框中提取元素
2.11 取向量子集
x = 1:10
x[x>5] #取x中小于5的元素
x[x>5 & x<7] #取x中小于7大于5的元素
x[x<5 | x>8] #取x中小于5 或者 大于8的元素
y = 1:4
names(y) = c("a","b","c","d")
y
a b c d
1 2 3 4
y[2] #直接取第2个元素
y["b"] #取名称是b的元素,有时候我们只记得名称
2.12 取矩阵子集
> x = matrix( 1:6, nrow = 2, ncol = 3)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> x[1,2] #取矩阵x的1行2列的元素
[1] 3
> x[1,] #取矩阵x的第1行的元素
[1] 1 3 5
> x[2,c(1,3)] #取矩阵x的行第2的第1,3列的元素
[1] 2 6
> class(x[1,2]) # x[1,2] 类型竟不是矩阵格式
[1] "integer"
> x[1,2, drop = FALSE] #得到 x[1,2] 类型是矩阵格式
> class(x[1,2, drop = FALSE] )
[1] "matrix"
2.13 取数据框子集
x = data.frame(v = 1:5, c = 6:10, u = 11:15)
x$v[c(2,4)] #取x 中变量v列的第2,4个元素
x[,2]
x[,"v"] #二者都表示取同1列
x[(x$v < 4 & x$c >= 8), ] #取v变量小于4 且 c变量大于8的数据行
x[x$v > 2, ] #取v变量大于4的数据行
x[which(x$v > 2), ] #取v变量大于4的数据行 二者结果一致 但有所不同
> x$v > 2 #返回逻辑值
[1] FALSE FALSE TRUE TRUE TRUE
> which(x$v > 2) #返回下标(位置)
[1] 3 4 5
> subset(x, x$v > 2) #取v变量大于4的数据行
2.14 取列表子集
> x = list(id = 1:4, height = 170, gender = "male")
> x
$id
[1] 1 2 3 4
$height
[1] 170
$gender
[1] "male"
x[1] #取到名称 和 内容
x["id"] #取到名称 和 内容
$id
[1] 1 2 3 4
x[[1]] #只取内容
x[["id"]] #只取内容
> [1] 1 2 3 4
列表中含有列表的时候
> x = list( a = list(1,2,3,4), b = c("a","d","e"))
> x
$a
$a[[1]]
[1] 1
$a[[2]]
[1] 2
$a[[3]]
[1] 3
$a[[4]]
[1] 4
$b
[1] "a" "d" "e"
> x[[1]][[2]] #取元素里的内容
> [1] 2
> x[[1]][2] #取元素
[[1]]
[1] 2
> x[[c(1,3)]] #取元素
[1] 3
> x[[c(2,2)]] #取元素
[1] "d"
2.15 处理缺失值
> x = c(1,NA,3,NA,8)
> is.na(x) #x中是否有缺失值
[1] FALSE TRUE FALSE TRUE FALSE
> x[!is.na(x)] #取不是缺失值的元素
[1] 1 3 8
> y = c(1,NA,3,NA,8)
> z = c("a", "b", "NA", "NA", "d")
> w = complete.cases(y,z) #取二者对应都不是缺失值的数据
[1] TRUE FALSE TRUE FALSE TRUE
> x[w]
[1] 1 3 8
> z[w]
[1] "a" "NA" "d" #似乎有些问题 但我不知道哪儿错了
> library(datasets)
> nrow(airquality) #153行
> head(airquality,10) #airquality前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
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
7 23 299 8.6 65 5 7
8 19 99 13.8 59 5 8
9 8 19 20.1 61 5 9
10 NA 194 8.6 69 5 10
> g = complete.cases(airquality) #检测每一行是否有缺失值
> g
[1] TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
[14] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
[27] FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[40] TRUE TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
[53] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE
[66] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE
[79] TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[92] TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
[105] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
[118] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[131] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[144] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
> airquality[g,][1:10,] #选择没有缺失值(g)的观测的前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
后续请参考:
R语言基础之第一部分 : 5种数据对象类型
R语言基础之第三部分:重要函数apply族函数的使用
R语言基础之第四部分 : 排序
R语言基础之第五部分 : 总结数据信息