我基本上是使用R軟件的新手。用於重複值列的R代碼
我有一個Excel文件重複代碼(數值/分類)的列表。我需要添加另一個列值(即使是隨機的),每個相同的代碼將獲得相同的值。
Codes Value
1 122
1 122
2 155
2 155
2 155
4 101
4 101
5 251
5 251
謝謝。
我基本上是使用R軟件的新手。用於重複值列的R代碼
我有一個Excel文件重複代碼(數值/分類)的列表。我需要添加另一個列值(即使是隨機的),每個相同的代碼將獲得相同的值。
Codes Value
1 122
1 122
2 155
2 155
2 155
4 101
4 101
5 251
5 251
謝謝。
我們可以用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
不是數字但是是分類的,則match
和factor
方法仍然有效。
什麼你也可以做的是下面的,它可能是更直觀的初學者:
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')
謝謝!它運作良好:) – icychamp
嘗試這個!它完全工作!謝謝。 – icychamp
當我的代碼變量是字符時它會工作嗎?而當我引入另一列B時,就像我的數據框不僅包含上面的那兩列一樣? – icychamp