【问题标题】:How to randomize a character string in a dataframe [duplicate]如何随机化数据框中的字符串[重复]
【发布时间】:2019-07-19 12:36:30
【问题描述】:

我有一个包含 2 列的数据框,每一列都是“字符”类。一列是标识符,第二列由我要随机化的字母组成。

df <- data.frame(identifier=c("number1", "number2", "number3"), 
                 values=c("AGLRJMV", "KTKOXSOCOFMTMSOV", "GTSHH"))

df$identifier <- as.character(as.factor(df$identifier))
df$values <- as.character(as.factor(df$values))

我无法随机化这些字母,因为 R 不将它们视为单个字符,而是将它们视为一个字符串。所以当我尝试

sample(df[,2]) 

它不会随机化字母。

我尝试将第二列拆分为每个字母的单列,但由于列数不一样,我无法再次合并这些列。

所以,我最终想要的是:

identifier values 
number1    MVARJGL
number2    OTMCOFMKOSOVKTXS
number3    STHHG

很抱歉,这可能是一个显而易见的问题,但我就是想不通。如果这个问题已经在其他地方得到回答,我很高兴被引导到那个问题。

【问题讨论】:

  • 你到底是怎么想得到这个的:MVARJGL?我们可以采样很多次而没有得到这个。还有其他逻辑吗?
  • @NelsonGon 不,我猜,OP 正试图展示我们可以获得的众多可能输出之一。
  • 啊!谢谢@RonakShah 有道理。
  • 是的,我就是这个意思:)

标签: r random character


【解决方案1】:

使用stringi 包及其stri_rand_shuffle 函数:

require(stringi)
set.seed(1)
values <- c("AGLRJMV", "KTKOXSOCOFMTMSOV", "GTSHH")
stri_rand_shuffle(values)
#[1] "GAJVLRM"          "VOTSXMOTFMOKSCKO" "SHTGH"

【讨论】:

    【解决方案2】:

    我们可以拆分values 中的每个字符,然后使用sample 随机化,最后将paste 字符串组合在一起,将它们作为一个单词返回。

    df$values1 <- sapply(strsplit(df$values,""), function(x)
                        paste0(sample(x), collapse = ""))
    
    df
    #  identifier           values          values1
    #1    number1          AGLRJMV          GJRMVAL
    #2    number2 KTKOXSOCOFMTMSOV OSFKMOKCOXMVOTST
    #3    number3            GTSHH            HHTGS
    

    【讨论】:

    • 太棒了,这正是我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多