找回密码
 注册
查看: 10843|回复: 0

R语言中如何选择和修改一个数据集的子集

[复制链接]
发表于 2011-1-22 20:17:59 | 显示全部楼层 |阅读模式
一个向量的子集(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 中所有的缺省值,而
> y[y < 0] <- -y[y < 0]
和下面式子等价
> y <- abs(y)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2025-5-2 05:27 , Processed in 0.019628 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表