2016-09-16 6 views
0

私は基本的にRソフトウェアを使うのが初めてです。列に値を繰り返すためのRコード

Excelの繰り返しコード(数値/カテゴリ)の一覧があります。私は同じコードが同じ値を得る別の列の値を(ランダムに)追加する必要があります。

Codes Value 
1 122 
1 122 
2 155 
2 155 
2 155 
4 101 
4 101 
5 251 
5 251 

ありがとうございます。

答えて

0

我々はmatchを使用することができます。

n <- length(code0 <- unique(code)) 
value <- sample(4 * n, n)[match(code, code0)] 

またはfactor

n <- length(unique(code)) 
value <- sample(4 * n, n)[factor(code)] 

発生するランダム整数は1と4 * nの間です。番号4は任意です。 100を入力することもできます。


set.seed(0); code <- rep(1:5, sample(5)) 

code 
# [1] 1 1 1 1 1 2 2 3 3 3 3 4 4 4 5 

n <- length(code0 <- unique(code)) 
sample(4 * n, n)[match(code, code0)] 

# [1] 5 5 5 5 5 18 18 19 19 19 19 12 12 12 11 

コメント

上記codeを容易にソートまたは連続した値を取っていないと仮定すると、最も一般的な治療を与えます。

codeが(関係なく、それは必要なもの値)にソートされていない場合、我々はまた、rleを使用することができます。

if (!is.unsorted(code)) { 
    n <- length(k <- rle(code)$lengths) 
    value <- rep.int(sample(4 * n, n), k) 
    } 

codeが連続した値1, 2, ..., n(必ずしもソートされていない)を取る場合、私たちはmatchまたはfactorをスキップすることができますし、操作を行います。

n <- max(code) 
value <- sample(4 * n, n)[code] 

さらに予告codeが数字ではなくカテゴリになっていない場合は、matchfactorの方法でも機能します。あなたはまた、次のされて何ができるか

+0

はこれを試してみました!それは完全に働いた!ありがとうございました。 – icychamp

+0

私のコード変数が文字の場合は動作しますか?そして、私のデータフレームが上記の2つの列だけでなく、他の列Bを導入したときは? – icychamp

0

、それはおそらく、初心者にとってより直感的である:

data <- data.frame('a' = c(122,122,155,155,155,101,101,251,251)) 

duplicates <- unique(data) 
duplicates[, 'b'] <- rnorm(nrow(duplicates)) 

data <- merge(data, duplicates, by='a') 
+0

ありがとうございました!それはうまくいった:) – icychamp

関連する問題