簡體   English   中英

如何從字符串中提取隨機字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM