在R语言中,有下面三种操作符可以提取对象的子集:
? “[”通常返回的对象与原对象的类型相同;它也可以返回一个对象中的多个元素
? “[[”用来从列表(list)或数据框(data.frame)中提取对象;也可从列表或数据框中提取单个元素,且返回对象的类型可以不为列表和数据框。
? “$”可以通过名称从列表和数据框中提取元素;如果仅从抽取元素的角度来看,和“[[”没有区别
(1) 向量
向量可以使用“[]”提取对应位置的单个元素,或多个元素,也可以在“[]”设置条件,提取对应元素。
> x <- c("a", "b", "c", "d", "e", "f")
> x[2] ##单个提取
[1] "b"
> x[2:5] ##批量提取
[1] "b" "c" "d" "e"
> x[x>"c"] ##条件提取
[1] "d" "e" "f"
> u<-x>"b" ##逻辑判断
> u
[1] FALSE FALSE TRUE TRUE TRUE TRUE
> x[u] ##逻辑提取
[1] "c" "d" "e" "f"
(2)矩阵
也可以提取矩阵中的对应元素,默认情况下返回的是一个单元素向量,如果将属性drop=FALSE(drop默认值为TRUE),则返回一个1×1的矩阵,也可以通过缺失值来返回整行和整列元素:
> x <- matrix(1:6, 2, 3)
> x[2,3]
[1] 6
> x[1,2]
[1] 3 ##返回单个元素
> x[1,2,drop=FALSE]
[,1]
[1,] 3 ##返回1×1的矩阵
> x[1,]
[1] 1 3 5 ##返回第一行,并将其向量化
> x[1,,drop=FALSE]
[,1] [,2] [,3] ##返回第一行的矩阵形式
[1,] 1 3 5
(3)列表
> x<-list(one=1:4,two=5)
> x
$one
[1] 1 2 3 4
$two
[1] 5
> x[1] ##返回名称与值,类型为list
$one
[1] 1 2 3 4
> x[[1]] ##返回元素的值,类型为对应位置元素的类型,而不为list类型
[1] 1 2 3 4
> x[["one"]] ##也可使用名称索引对应位置的元素
[1] 1 2 3 4
> x$one
[1] 1 2 3 4
> x[[2]][[1]] ##可以返回特定位置的单个元素
[1] 5
> x[[c(2,1)]]
[1] 5
> x=list(data=1:5)
> x[["data"]]
[1] 1 2 3 4 5
> x[["d"]]
NULL
> x[["d",exact=FALSE]] ##list默认元素名称全局匹配,但将属性exact设置为TRUE时可局部匹配元素名称
[1] 1 2 3 4 5
(4)缺失值移除
> x<-c(1,2,3,NA,5,NA)
> bad<-is.na(x)
> bad
[1] FALSE FALSE FALSE TRUE FALSE TRUE
> x[!bad]
[1] 1 2 3 5
也可以通过complete.cases()函数来判断缺失数值。
> x <- c(1, 2, NA, 4, NA, 5)
> good<-complete.cases(x)
> good
[1] TRUE TRUE FALSE TRUE FALSE TRUE
> x[good]
[1] 1 2 4 5
complete.cases()同样也可以处理矩阵数据
> airquality[1:6, ]
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
> airquality[good, ][1:6,]
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
时间: 2024-10-03 21:41:35