【问题标题】:replace characters with random numbers in R用R中的随机数替换字符
【发布时间】:2021-12-27 06:30:54
【问题描述】:

我有字符数据列表。我想用随机数替换这些字符。

characters<-LETTERS[c(1:10,1:10,11:15)]
numbers <- floor(runif(16, min = 1, max = 100))

如何将数字添加到每个字符中?

【问题讨论】:

  • 就像您想为字母随机分配一个数字一样,例如all"A"s 变成 4"B"s 变成 12,"C"s 变成 9 等等……还是别的什么?您的 Q 不清楚 - 请提供更好的示例输入和所需的输出
  • 我很抱歉我的解释很糟糕。是的,我想把所有的“A”变成 4,“B”变成 12 等等。

标签: r dplyr


【解决方案1】:

只需使用factors 并转换为数字。

as.numeric(as.character(factor(characters, labels=numbers)))
# [1] 91 93 29 83 64 52 73 14 66 70 91 93 29 83 64 52 73 14 66 70 46 72 93 26 46

您也可以按任意顺序阅读levels=

as.numeric(as.character(factor(characters, 
       levels=c("L", "E", "D", "B", "H", "O", "C", "K", "G", "A", "N", "J", 
                "M", "I", "F"),
       labels=numbers)))
# [1] 70 83 73 29 93 46 66 64 26 72 70 83 73 29 93 46 66 64 26 72 14 91 93 46 52

或者,使用 R >= 4.1

characters |>
  factor(levels=c("L", "E", "D", "B", "H", "O", "C", "K", "G", "A", "N", "J", 
                  "M", "I", "F"),
         labels=numbers) |>
  as.character() |>
  as.numeric()
# [1] 70 83 73 29 93 46 66 64 26 72 70 83 73 29 93 46 66 64 26 72 14 91 93 46 52

数据:

set.seed(42)
characters <- LETTERS[c(1:10, 1:10, 11:15)]
numbers <- floor(runif(length(unique(characters)), min=1, max=100))

【讨论】:

    【解决方案2】:

    创建引用键,然后合并数据

    data <- data.frame(char = LETTERS[c(1:10,1:10,11:15)])
    
    key <- data.frame(char = unique(data$char), num = sample(0:99, size=length(unique(data$char)), replace=FALSE))
    
    merge(key, data, on="char")
    

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 2012-06-24
      • 2017-08-06
      • 2020-08-14
      相关资源
      最近更新 更多