[英]How can I extract random characters from a string?
我有一個字符串列表:
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.