我基本上不习惯使用R软件。
我有一个excel文件中的重复代码(数字/分类)列表。我需要添加另一个列值(即使是随机的),每个相同的代码将获得相同的值。
-> ALL [PRIVILEGES] Grant all privileges at specified access level except GRANT OPTION
谢谢。
答案 0 :(得分: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
不是数字但是分类,则match
和factor
方法仍然有效。
答案 1 :(得分: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')