在R中最多选择n个元素

时间:2013-10-18 04:36:07

标签: r subset

这似乎是一个非常简单的问题,但我无法弄明白。

如何从R?列表中选择最多n个元素?

> x = 1:3
> x[1:5]
[1]  1  2  3 NA NA

我想要的是x[1:5]返回[1] 1 2 3

我尝试过的解决方案是

x[!is.na(x[1:3])]

仍然不起作用,因为

> x[!is.na(x[1:5])]
[1] 1 2 3            # correct
> x[!is.na(x[1:2])]
[1] 1 2 3            # where's that coming from?

2 个答案:

答案 0 :(得分:1)

为了确保您没有索引超过向量的末尾,您可以执行以下操作:

x[1:(min(5, length(x)))]

答案 1 :(得分:1)

  

x[!is.na(x[1:2])]
     [1] 1 2 3 # where's that coming from?

这来自回收 is.na(X)返回一个长度等于其参数X的逻辑向量。由于没有NA s这个向量都是TRUE s。这些值(同样,所有TRUE)都会被回收到x的长度(括号外xx[ . ]

至于从x中选择,不超过x的长度,请使用headtail作为评论中提到的@Ananda。

x <- 1:6
head(x, 4)
# [1] 1 2 3 4
head(x, 20)
# [1] 1 2 3 4 5 6

tail(x, 4)
# [1] 3 4 5 6
tail(x, 20)
# [1] 1 2 3 4 5 6