如何从字符串中提取随机字符



我有一个字符串列表:

thzJqGVnDxGzyUPZ8r5z
4JfDZijTxDMKBANKPvw1
t7X5C4Nubv8oGIcPEhIc
ZKwBEZBC5IDfm6atAzTG
gIZRkF6XvlOEI8GI2T8l

我希望从每个字符串中随机抽取十个字符。

例如,输出应该是这样的(注意顺序是不相关的——只要它是一个样本(:

tzJqVDGyZz
fDjTDKAKw1
t7X58oGIhI
ZKwBEatzTG
gIZ8GI2T8l

有没有一种简单的方法可以实现这一点?

注意:不应该有替换(即,一旦选择了字符,就不能替换并再次选择(。

如果字符串包含任何字符的多个实例,则每个字符都应被视为独立的/单独的。

例如:字符串AABBCCDDEE1122334455可以具有AABB44DD2E的有效结果。

结果永远不可能是AAABB44DD2,因为这将包括原始字符串中不存在的附加A

您可以使用utf8ToInt+sample

sapply(s,
function(v) intToUtf8(utf8ToInt(v)[sort(sample(nchar(v), 10))]),
USE.NAMES = FALSE
)

它给出了类似的结果

[1] "hJnDxGzUPr" "ZjTxAKPvw1" "7C4vIcEhIc" "ZKBEZBImtz" "gIRkvlE2T8"

如果你不在乎字符之间保持相同的相对顺序,你可以在上面的代码中省略sort

这里有一种方法:

x <- "dkdkdkdkdkdk"
nums <- sample(1:nchar(x), 10, replace = FALSE)
output <- paste0(strsplit(x, "")[[1]][nums], collapse="")

将单词分成字符,然后制作长度为10的样本并粘贴在一起:

as.character(lapply(strsplit(words,split = ""), function(x) paste0(sample(x, 10, replace = FALSE), collapse = "")))

数据:

words <- c(
"thzJqGVnDxGzyUPZ8r5z",
"4JfDZijTxDMKBANKPvw1",
"t7X5C4Nubv8oGIcPEhIc",
"ZKwBEZBC5IDfm6atAzTG",
"gIZRkF6XvlOEI8GI2T8l")

regmatches():

sapply(
regmatches(
input, 
lapply(
input, 
(x) {
output <- sort(sample(seq_len(nchar(x)), 10L))
attr(output, 'match.length') <- rep(1L, 10L)
output
}
)
), 
(x) paste(x, collapse = '')
)
# [1] "zJGnxzZ8r5" "fZTDKBNPv1" "tC48ocPhIc" "ZKBEC5fmTG" "gIkFXvOEGl"

最新更新