R語言基礎之第二部分:操縱數(shù)據(jù)取子集
2.1 構建子集
[ ]:提取一個or多個類型相同的元素
[[ ]]:從列表或數(shù)據(jù)框中提取元素
$ :按名字從列表or數(shù)據(jù)框中提取元素
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 取數(shù)據(jù)框子集
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的數(shù)據(jù)行
x[x$v > 2, ] #取v變量大于4的數(shù)據(jù)行
x[which(x$v > 2), ] #取v變量大于4的數(shù)據(jù)行 二者結果一致 但有所不同
> x$v > 2 #返回邏輯值
[1] FALSE FALSE TRUE TRUE TRUE
> which(x$v > 2) #返回下標(位置)
[1] 3 4 5
> subset(x, x$v > 2) #取v變量大于4的數(shù)據(jù)行
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) #取二者對應都不是缺失值的數(shù)據(jù)
[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
后續(xù)請參考:
R語言基礎之第一部分 : 5種數(shù)據(jù)對象類型
R語言基礎之第三部分:重要函數(shù)apply族函數(shù)的使用
R語言基礎之第四部分 : 排序
R語言基礎之第五部分 : 總結數(shù)據(jù)信息