0

これが私の問題です:

myvec <- c(1, 2, 2, 2, 3, 3,3, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10)

定義するカテゴリの数に応じて、このベクトルに対応できる関数を開発したいと思います。

カテゴリ1の場合、すべてのnewvec要素は1になります

カテゴリが2の場合

ユニーク(myvec)、すなわち

1 = 1, 2 =2, 3 = 1, 4 = 2, 5 =1, 6 = 2, 7 = 1, 8 = 2, 9 = 1, 10 = 2

(これは奇数または偶数の状況です)

カテゴリが3の場合、最初の3つの数字は1:3になり、パターンが繰り返されます。

1 = 1, 2 = 2, 3=3, 4=1, 5 = 2, 6 = 3, 7 =1, 8 = 2, 9 = 3, 10 =1 

カテゴリが4の場合、最初の数字は1:4になり、パターンが繰り返されます

1 = 1, 2 = 2, 3= 3, 4 = 4, 5 = 1, 6 = 2, 7=3, 8=4, 9 =1, 10 = 2

同様に、n個のカテゴリの最初の1:nで、パターンが繰り返されます。

4

2 に答える 2

4

私が質問を正しく理解していれば、これはあなたが必要とすることをするはずです。変数nを変更して、グループの数を選択できます。

myvec <- c(1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10)
out <- vector(mode="integer", length=length(myvec))
uid <- sort(unique(myvec))
n <- 3
for (i in 1:n) {
  s <- seq(i, length(uid), n)
  out[myvec %in% s] <- i
}
于 2012-04-26T13:01:16.663 に答える
3

Rのリサイクル機能を使用する(これにより、ベクトルの長さがnで割り切れない場合に警告が表示されます)。

R> myvec <- c(1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10)
R> n <- 3
R> y <- cbind(x=sort(unique(myvec)), y=1:n)[, 2]
R> y
 [1] 1 2 3 1 2 3 1 2 3 1

または使用rep

R> x <- sort(unique(myvec))
R> y <- rep(1:n, length.out=length(x))
R> y
 [1] 1 2 3 1 2 3 1 2 3 1

更新:モジュロ演算子を使用できます

R> myvec
 [1]  1  2  2  2  3  3  3  4  4  5  6  6  6  6  7  8  8  9 10 10 10
R> n <- 4
R> ((myvec - 1) %% n) + 1
 [1] 1 2 2 2 3 3 3 4 4 1 2 2 2 2 3 4 4 1 2 2 2
于 2012-04-26T13:20:10.010 に答える