Ответ 1
Вы пропустили аргумент each=
до rep()
:
R> n <- 3
R> rep(1:5, each=n)
[1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
R>
поэтому ваш пример можно сделать с помощью простого
R> rep(1:8, each=20)
Это очень простой вопрос, но он меня раздражает, поэтому я прошу.
Мне нужна последовательность повторяющихся чисел, т.е. 1 1... 1 2 2... 2 3 3... 3 и т.д. То, как я это осуществил, было
nyear<-20
names<-c(rep(1,nyear),rep(2,nyear),rep(3,nyear),rep(4,nyear),
rep(5,nyear),rep(6,nyear),rep(7,nyear),rep(8,nyear))
который работает, но неуклюж, и, очевидно, плохо масштабируется. Как я повторяю N целых чисел M раз каждый в последовательности? Я попытался вложить seq() и rep(), но это не совсем так, как я хотел. Я могу, очевидно, написать цикл for, который это сделает, но это также кажется неуклюжим - должен быть внутренний способ сделать это!
Вы пропустили аргумент each=
до rep()
:
R> n <- 3
R> rep(1:5, each=n)
[1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
R>
поэтому ваш пример можно сделать с помощью простого
R> rep(1:8, each=20)
Для вашего примера ответ Дирка идеален. Если у вас вместо этого был фрейм данных и вы хотите добавить последовательность такого рода в виде столбца, вы также можете использовать group
из groupdata2 (выражение об отказе: мой пакет), чтобы жадно разделить точки данных на группы.
# Attach groupdata2
library(groupdata2)
# Create a random data frame
df <- data.frame("x" = rnorm(27))
# Create groups with 5 members each (except last group)
group(df, n = 5, method = "greedy")
x .groups
<dbl> <fct>
1 0.891 1
2 -1.13 1
3 -0.500 1
4 -1.12 1
5 -0.0187 1
6 0.420 2
7 -0.449 2
8 0.365 2
9 0.526 2
10 0.466 2
# … with 17 more rows
Существует целый ряд методов для создания такого рода группового фактора. Например, по количеству групп, списку размеров групп или по наличию групп, если значение в некотором столбце отличается от значения в предыдущей строке (например, если столбец имеет значение c("x","x","y","z","z")
коэффициент группировки будет c(1,1,2,3,3)
.