我基本上是使用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