首页 > 解决方案 > 如何将字符串列表转换为唯一的单个字符?

问题描述

我有一个变量,它是按顺序排列的不同鸟叫的列表。我想给每个不同的电话一个独特的、单一的角色。我找到了一种方法来给他们唯一的数字,但是一旦我达到 10 就不好了,因为我需要把这个列表变成一串字母和/或数字。

例如,我的一些数据框如下所示:

> d1
  Order        Type
1     1 Bowerbird a
2     2     Catbird
3     3       Robin
4     4   Scrubwren
5     5 Bowerbird b
6     6  Kookaburra
7     7     Catbird
8     8     Rosella

我想将每个独特的调用转换为不同的字符。它可以是小写字母、大写字母或数字,只要它们都是单个数字即可。例如:

> d1
  Order        Type Unique
1     1 Bowerbird a      a
2     2     Catbird      b
3     3       Robin      c
4     4   Scrubwren      1
5     5 Bowerbird b      2
6     6  Kookaburra      A
7     7     Catbird      b
8     8     Rosella      B

然后可以将这个调用序列写为“abc12AbB”。

我有大约 40 种不同的可能调用,所以如果可以避免的话,我不想使用 ifelse 函数来执行此操作。有没有办法将每个字符串转换为唯一字符?

标签: r

解决方案


我们可以使用数字 0-9 的大小写字母,它们的大小为 62。

set.seed(123)
df$unique <- sample(c(letters, LETTERS, 0:9))[factor(df$Type)]

df
#  Order       Type unique
#1     1 Bowerbirda      E
#2     2    Catbird      Y
#3     3      Robin      c
#4     4  Scrubwren      X
#5     5 Bowerbirdb      o
#6     6 Kookaburra      n
#7     7    Catbird      Y
#8     8    Rosella      P

您实际上并不需要sample在这里添加它以引入随机性。

您可以将调用序列编写为

paste0(df$unique, collapse = "")
#[1] "EYcXonYP"

推荐阅读