2016-09-16 77 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(但不一定排序),我們可以跳過matchfactor和這樣做:

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

另行通知:如果code不是數字但是是分類的,則matchfactor方法仍然有效。

+0

嘗試這個!它完全工作!謝謝。 – icychamp

+0

當我的代碼變量是字符時它會工作嗎?而當我引入另一列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