用于将值重复到列中的R代码

时间:2016-09-16 08:44:31

标签: r

我基本上不习惯使用R软件。

我有一个excel文件中的重复代码(数字/分类)列表。我需要添加另一个列值(即使是随机的),每个相同的代码将获得相同的值。

-> ALL [PRIVILEGES] Grant all privileges at specified access level except GRANT OPTION

谢谢。

2 个答案:

答案 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(但未必排序),我们可以跳过matchfactor并执行:

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

进一步通知:如果code不是数字但是分类,则matchfactor方法仍然有效。

答案 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')