#r #vector
#r #вектор
Вопрос:
У меня есть вектор:
> dput(rn, 20)
c(128L, 241L, 354L, 467L, 580L, 693L, 806L, 919L, 1032L, 1145L,
1258L, 1371L, 1484L, 1597L, 1710L, 1823L, 1936L, 2049L, 2162L,
2275L)
Как мне получить каждую третью запись из этого вектора?
Ответ №1:
Пусть переработка делает это волшебно.
rn[c(FALSE, FALSE, TRUE)]
хотя это (и все другие ответы, я думаю) не удается length(rn) < 3
. Может быть
rn[3L * seq_len(length(rn)/3L)]
Ответ №2:
Используется seq
для создания последовательности индексных номеров:
> rn[seq(3, 20, 3)]
[1] 354 693 1032 1371 1710 2049
Это работает, потому seq
что генерирует следующую последовательность:
seq(from=3, to=20, by=3)
[1] 3 6 9 12 15 18
В более общем плане, если вы не знаете длину своего вектора заранее, вы можете вычислить его с помощью length
:
seq(from=3, to=length(rn), by=3)
[1] 3 6 9 12 15 18
Смотрите ?seq
для получения дополнительной справки.
Комментарии:
1. Ха-ха… мы определенно находимся в какой-то синхронизации R-вопросов и ответов. 1 за то, что опередил меня на несколько секунд (и проклинает ограничение в 30 символов)!
Ответ №3:
rn[seq(3,length(rn),3)] # 30 chars
Ответ №4:
Может тебе нравится это?
> x <- c(128L, 241L, 354L, 467L, 580L, 693L, 806L, 919L, 1032L, 1145L,
1258L, 1371L, 1484L, 1597L, 1710L, 1823L, 1936L, 2049L, 2162L,
2275L)
>
> x[seq(3, length(x), 3)]
[1] 354 693 1032 1371 1710 2049
Ответ №5:
seq()
само по себе делает приятные вещи: x[seq(x)%%3==0]
сделает свое дело. Технически x[seq_along(x)%%3==0]
это быстрее, но большую часть времени вам будет все равно.
Например,
> letters[seq(letters)%%3==0]
[1] "c" "f" "i" "l" "o" "r" "u" "x"