r - 消除字符向量中非唯一元素的歧义

标签 r string

给定一个由非唯一的患者姓名首字母组成的向量:

init = c("AA", "AB", "AB", "AB", "AC")

寻找消歧义如下:

init1 = c("AA", "AB01", "AB02", "AB03", "AC")

即唯一的首字母应保持不变,非唯一的首字母可通过添加两位数来消除歧义。

最佳答案

将指定的函数与ave一起使用:

uniquify <- function(x) if (length(x) == 1) x else sprintf("%s%02d", x, seq_along(x))
ave(init, init, FUN = uniquify)
## [1] "AA"   "AB01" "AB02" "AB03" "AC"  

如果基本要求只是确保唯一的输出,则 make.unique(x)make.unique(x, sep = "0") 如所讨论的另一个答案和评论很简洁,但如果要求输出与问题中完全相同,那么它们不会给出相同的结果。如果有 10 个或更多重复项,这些答案的输出差异更大;然而,这里的解决方案确实给出了相同的答案。这是说明 10 个或更多重复项的进一步示例。

xx <- rep(c("A", "B", "C"), c(1, 10, 2))
ave(xx, xx, FUN = uniquify)
## [1] "A"   "B01" "B02" "B03" "B04" "B05" "B06" "B07" "B08" "B09" "B10" "C01" "C02"

make.unique 解决方案可以这样挽救:

关于r - 消除字符向量中非唯一元素的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062748/

相关文章:

java - 需要将输入文本的每个字母替换为另一个特定字母

java - 如何将字符串转换为数学方程式?

c# - 如何在C#中替换字符串中的文本?

string - 围绕 Scala 字符串

ios - 在 Realm - Swift 中按字符串值(语言环境)对数组进行排序

r - 计算密度估计曲线下的面积,即概率

r - 在 ggplot2 中使用数学运算符绘制数学表达式

r - 可以使用 R 编写 Excel 公式或数据验证吗?

r - r编程中的拉格朗日插值公式

删除边距并更改 ggplot 中标签的字体样式