これは非常に基本的な質問ですが、それは私を悩ますので、私は尋ねています。
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ループを書くことができますが、これはまた不器用に思えます-これを行うための本質的な方法があるはずです!
rep()
へのeach=
引数がありません:
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)
たとえば、Dirkの答えは完璧です。代わりにデータフレームがあり、その種のシーケンスを列として追加する場合は、groupdata2のgroup
(免責事項:my package)を使用して、データポイントをグループに貪欲に分割することもできます。
_# 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)
。