Створити послідовність повторюваних значень у послідовності?


83

Мені потрібна послідовність повторюваних чисел, тобто 1 1 ... 1 2 2 ... 2 3 3 ... 3 etc.спосіб, яким я це реалізував:

  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-loop для цього, але це повинен бути внутрішній спосіб!

Відповіді:


164

Ви пропустили 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

Для вашого прикладу, відповідь Дірка ідеальна. Якщо у вас замість цього був фрейм даних і ви хочете додати такий тип послідовності як стовпець, ви можете також використовувати 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).


1

Іншим base Rваріантом може бути gl():

gl(5, 3)

Де результат є фактором:

 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
Levels: 1 2 3 4 5

Якщо потрібні цілі числа, ви можете перетворити їх:

as.numeric(gl(5, 3))

 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.