R:向量筛选
来源:互联网 发布:字符串拼接函数 js 编辑:程序博客网 时间:2024/06/05 20:51
筛选是R中很关键的运算。我们对向量使用函数——它也是向量化的另一个例子,与你看到的其他向量化一样。
►生成筛选索引
> z <- c( 5, 2, -3, 8 )
> z*z > 8
[1] TRUE FALSE TRUE TRUE
> z[ z*z > 8 ]
[1] 5 -3 8
#使用Z筛选自身
> z <- c( 5, 2, -3, 8 )
> y <- c( 1, 2, 30, 5 )
> y[ z*z > 8 ]
[1] 1 30 5
#使用向量Z筛选另一个向量y的索引。
►使用subset()函数筛选
也可以使用subset()函数做筛选。当对向量使用该函数时,它与普通的筛选方法的区别在于处理NA值的方式上。
> x <- c( 6, 1:3, NA, 12 )
> x[ x > 5 ]
[1] 6 NA 12
> subset( x, x > 5 )
[1] 6 12
我们使用前一节提到的普通筛选方法,R会认为“x[5]是未知的,因此其平方是否大于5同样是未知的。”但也许你不希望NA出现在结果中。当你希望在结果中剔除NA值时,使用subset()将免去自己移除NA的麻烦。
►使用which()函数
筛选是从向量z中提取满足一定条件的元素。但是,在某些情况下,我们希望找到z中满足条件元素所在的位置。此时可以使用which(),如下所示:
> z <- c( 5, 2, -3, 8 )
> which( z*z > 8 )
[1] 1 3 4
注:结果表明z中的第一、第三和第四元素平方大于8。
which()有一个非常方便(尽管有点浪费)的用法,是在一个向量中找出满足一定条件的元素首次出现的位置。代码如下:
> first <- function( x ) return ( which( x==1 )[1] )
注:查询1第一次出现的位置。代码等同于:
first <- function( x ){
for( i in 1:length( x ) )
if( x[i] == 1 )
break
return ( i )
}
调用which()产生x中所有1的索引。这些索引将以向量形式给出,然后我们取该向量中的第一个元素,即是第一个1的索引。这一代码更加简洁。但另一方面,它也比较浪费,因为它找出了x中所有的1,而我们只需要第一个。因此,尽管它是向量化方法,可能更快,但如果x中第一个1出现在靠前的位置,则此方法实际上要慢一些。
►向量化的ifelse()函数
除了多数语言中常见的if-then-else结构,R还有一个向量化的版本:ifelse()函数。它的形式如下:
ifelse( b, u, v )
其中b是一个布尔值向量,而u和v是向量。该函数返回的值也是向量,如果b[i]为真,则返回值的第i个元素为u[i],如果b[i]为假,则返回值的第i个元素为v[i]。
> x <- 1 : 10
> y <- ifelse( x %% 2 == 0, 5, 12 )
> y
[1] 12 5 12 5 12 5 12 5 12 5
ifelse()相对于标准的if-then-else结构的优点是,它是向量化语句,因此有可能快很多。
- R:向量筛选
- R语言向量_筛选
- R:向量
- R:矩阵元素筛选
- R语言基础-向量
- R语言基础:向量
- R:测试向量相等
- R简介和向量
- R语言字母向量
- R 数字 字符 向量
- R 数字 字符 向量
- R 语言向量详解
- R语言 向量
- R向量矩阵运算
- R语言向量_向量符号化
- R语言向量_测试向量相等
- R语言:向量与赋值
- 转置-置换-向量空间R
- http详解
- PDF在线预览下载
- 重写五子棋程序
- 深入PHP内核(三)——内核利器哈希表与哈希碰撞攻击
- Android工程出現紅色感嘆號解決辦法
- R:向量筛选
- UIViewController 加载过程
- Qt4.8.4在windows7 64位机上的图文安装教程
- MD5加密,并以16进制返回
- autoit实现树形结构的实例
- Rails中通过checkbox实现批量删除
- Android实现圆角边框
- R:测试向量相等
- 如何编写一个修改数值参数的方法