반복되는 값의 순서를 순서대로 만드시겠습니까?


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

예를 들어 Dirk의 대답은 완벽합니다. 대신 데이터 프레임이 있고 이러한 종류의 시퀀스를 열로 추가하려는 경우에는 groupfrom 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.