Reputation: 921
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
Reputation: 61154
Just another alternative:
remove[seq_along(remove) %% 2 > 0]
# [1] 17 19 24 30 44
Upvotes: 16
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