繰り返される値のシーケンスを順番に作成しますか?


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ループを書くことができますが、これを行うための本質的な方法があるはずです!

回答:


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.