我想裁剪一个唯一名称的向量。我希望向量中的每个项目都尽可能小,但仍可以保持唯一。我的真实数据中的条目很长。
这是我最小的可复制示例。
flavors <- c("Apple mango", "Apple", "Cherry", "Cranberry", "Cran raspberry")
我删除了所有空格。
flavor <- stringr::str_replace_all(flavors, " ", "")
我希望结果是一个看起来像这样的向量。
c("Applem", "Apple", "Cherry", "Cranb", "Cranr")
有什么想法吗?在我的真实数据集中,此向量是机器学习模型中使用的列。使用查找表的哈希算法会更好吗?我愿意接受想法。
答案 0 :(得分:1)
如果只想获取唯一值,则可以使用digest
包中提供的digest
函数。
flavors <-
c("Apple mango", "Apple", "Cherry", "Cranberry", "Cran raspberry")
vf <- Vectorize(FUN = digest::digest,
vectorize.args = "object")
vf(object = flavors, algo = "crc32")
这将产生以下结果:
vf(object = flavors, algo = "crc32")
Apple mango Apple Cherry Cranberry Cran raspberry
"b8bd7ce5" "f3bbf1aa" "95671d86" "b3e2a7b8" "65abba84"
答案 1 :(得分:1)
我没有找到您想要的结果,但这是紧密而独特的。我只是不把Cranbe和Cranre带到Cranb和Cranr。它也不是很优雅(循环)。
maxLength <- max(unlist(lapply(X = flavor,FUN = str_length)))
stop <- FALSE
i <- 0
while (stop == FALSE) {
i <- i + 1
if (length(unique(substr(x = flavor,start = 1,stop = i))) == length(unique(flavor))) stop = TRUE
}
substr(x = flavor,start = 1,stop = i)
[1] "Applem" "Apple" "Cherry" "Cranbe" "Cranra"
答案 2 :(得分:1)
好像您有一个概念,即不要将任何内容切成5个以下的字符,否则“ Apple”将缩短为“ A”,“ Cherry”将缩短为“ C”。因此...
-managedassembly