加载中…
个人资料
枝叶飞扬
枝叶飞扬
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,921,751
  • 关注人气:217
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

R语言选择和修改数据集

(2013-01-16 10:44:52)
标签:

r

索引向量

it

分类: 数学
from:http://www.biostatistic.net/thread-2377-1-1.html

一个向量的子集(subset)元素可以通过向量名后面的方括号中加入索引向量到。如果一个表达式的结果是向量,则我们可以直接在表达式的末尾方括号中加入索引向量以得到结果向量的子向量(如果有的话)。
这种索引向量可以采用下面四种方式的任何一种。

1. 逻辑向量。这种情况下,索引向量必须和被挑选元素的向量长度一致。向量中对应索引向量元素为TRUE 的元素将会被选中,而那些对应FALSE 的元素则被忽略。例如
> y <- x[!is.na(x)]
这将创建(或重建)一个含x 中非缺省且次序不变的元素的对象y。注意,如果x含有缺省值,y 在长度上将会比x 短。

同样
> (x+1)[(!is.na(x)) & x>0] -> z
将创建一个对象z 并且把向量x+1 的值赋给它,其中要求x 中对应的元素既非缺省又是正值。

2. 正整数向量。这种情况下,索引向量必须是f1, 2, . . . , length(x)g的子向量。索引向量中索引对应的元素将会被选中,并且在结果向量中的次序和索引向量中的次序一致。这种索引向量可以是任意长度的,结果向量的长度和索引向量完全一致。如x[6]表示x 的第六个元素,此外
> x[1:10]
选择x 的前10个元素(我们假定length(x) 长度不小于10)。

同样(看上去好像不可能的事情)
> c("x","y")[rep(c(1,2,2,1), times=4)]
会产生一个长度为16,由"x", "y", "y", "x" 重复4次而构成的向量。

3. 负整数向量。这种索引向量指定被排除的元素而不是包括进来8。因此

> y <- x[-(1:5)]
将x 除开始五个元素外的其他元素都赋给y。

4. 字符串向量。这可能仅仅用于一个对象可以用names 属性来识别它的元素。这种情况下,名字向量的子向量可以像上面第二条提到的正整数标签一样使用。
> fruit <- c(5, 10, 1, 20)
> names(fruit) <- c("orange", "banana", "apple", "peach")
> lunch <- fruit[c("apple","orange")]
名字索引(name indices)相比数值索引(numeric indices)的好处就是容易该用法在后面的数据框(data frames)操作中,优势最为明显。

索引表达式同样可以出现在赋值操作的接受端。在这种情况下,赋值操作仅仅发生在这些索引指定的向量元素中。表达式必须以vector[indexv ector] 的形式出现,其中向量名字可以用任何表达式代替。被赋值的向量必须吻合索引向量的长度,特别在逻辑向量中它的长度必须和被建索引的向量长度一致。
例如

> x[is.na(x)] <- 0
将会用0替换x 中所有的缺省值

对于缺省值的处理:
a=c(3,NA,4,32,4,23,54,32,1,5,9,NA,8)
as.numeric(na.omit(a))
[1]   32  23 54 32     8
a[!is.na(a)]
[1]   32  23 54 32     8
如果想把NA替换为零或其他值,需要使用其它方法。
a[is.na(a)] <- 0

> y[y < 0] <- -y[y < 0]
和下面式子等价
> y <- abs(y)

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有