string - 在 R 中生成子字符串和随机字符串

标签 string r list text random

请耐心等待,我来自 Python 背景,我仍在学习 R 中的字符串操作。

好吧,假设我有一个长度为 100 的字符串,其中包含随机的 A、B、C 或 D 字母:

> df<-c("ABCBDBDBCBABABDBCBCBDBDBCBDBACDBCCADCDBCDACDDCDACBCDACABACDACABBBCCCBDBDDCACDDACADDDDACCADACBCBDCACD")
> df
[1]"ABCBDBDBCBABABDBCBCBDBDBCBDBACDBCCADCDBCDACDDCDACBCDACABACDACABBBCCCBDBDDCACDDACADDDDACCADACBCBDCACD"

我想做以下两件事:

1) 生成一个“.txt”文件,该文件由上述字符串的 20 个长度的子部分组成,每个子部分在前一个字母之后开始,在其上方的行中有自己唯一的名称,如下所示:

NAME1
ABCBDBDBCBABABDBCBCB
NAME2
BCBDBDBCBABABDBCBCBD
NAME3
CBDBDBCBABABDBCBCBDB
NAME4
BDBDBCBABABDBCBCBDBD

...等等

2) 获取生成的列表并从中包含另一个列表,该列表具有完全相同的子字符串,唯一的区别是将 A、B、C 或 D 中的一个或两个更改为另一个 A、B、C,或 D(仅这四个字母中的任何一个)。

所以,这个:

NAME1
ABCBDBDBCBABABDBCBCB

会变成这样:

NAME1.1
ABBBDBDBCBDBABDBCBCB

如您所见,第 3 个位置的“C”变成了“B”,第 11 个位置的“A”变成了“D”,这些更改后的字母之间没有暗示关系。纯随机。

我知道这是一个令人费解的问题,但正如我所说,我仍在学习 R 中的基本文本和字符串操作。

提前致谢。

最佳答案

  1. 创建子字符串的文本文件

    n <- 20 # length of substrings
    
    starts <- seq(nchar(df) - 20 + 1)
    
    v1 <- mapply(substr, starts, starts + n - 1, MoreArgs = list(x = df))
    
    names(v1) <- paste0("NAME", seq_along(v1), "\n")
    
    write.table(v1, file = "filename.txt", quote = FALSE, sep = "",
                col.names = FALSE)
    
  2. 随机替换一个或两个字母(A-D):

    myfun <- function() {
      idx <- sample(seq(n), sample(1:2, 1))
      rep <- sample(LETTERS[1:4], length(idx), replace = TRUE)
      return(list(idx = idx, rep = rep))
    }
    
    new <- replicate(length(v1), myfun(), simplify = FALSE)
    
    v2 <- mapply(function(x, y, z) paste(replace(x, y, z), collapse = ""),  
                 strsplit(v1, ""),
                 lapply(new, "[[", "idx"),
                 lapply(new, "[[", "rep"))
    
    names(v2) <- paste0(names(v2), ".1")
    
    write.table(v2, file = "filename2.txt", quote = FALSE, sep = "\n", 
                col.names = FALSE)
    

关于string - 在 R 中生成子字符串和随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737971/

相关文章:

java - 从 ArrayList<ArrayList<T>>> 中删除项目

c++ - 字符串引用和 const char 指针的函数重载

python - 为什么 join 内置函数对我的代码没有影响?

r - for 循环和 apply 函数系列之间的性能差异是什么?

r - 如何为演示教程创建演示?

list - Haskell 组列表直到组满足谓词

c++ - 连接一个 DWORD 和一个 LPCTSTR

c - 以特定顺序获取字符串组合的递归算法

r - 在 R 中创建一个变量并添加到循环中的数据框

java正则表达式仅匹配0-9的列表,顺序很重要