user1313954
user1313954

Reputation: 921

Select every other element from a vector

Let's say I had a vector:

remove <- c(17, 18, 19, 20, 24, 25, 30, 31, 44, 45).

How do I select / extract every second value in the vector? Like so: 17, 19, 24, 30, 44

I'm trying to use the seq function: seq(remove, 2) but it doesn't quite work.

Any help is greatly appreciated.

Upvotes: 69

Views: 62732

Answers (3)

Jilber Urbina
Jilber Urbina

Reputation: 61154

Just another alternative:

remove[seq_along(remove) %% 2 > 0]
# [1] 17 19 24 30 44

Upvotes: 16

Sven Hohenstein
Sven Hohenstein

Reputation: 81693

remove[c(TRUE, FALSE)]

will do the trick.


How it works?

If logical vectors are used for indexing in R, their values are recycled if the index vector is shorter than the vector containing the values.

Here, the vector remove contains ten values. If the index vector c(TRUE, FALSE) is used, the actual command is: remove[c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE)]

Hence, all values with odd index numbers are selected.

Upvotes: 165

Grega Kešpret
Grega Kešpret

Reputation: 12107

remove[seq(1,length(remove),2)]

Upvotes: 28

Related Questions