约翰霍普金斯大学数据科学系列课程——R语言:提取子集

在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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。