将数字字符串转换为数字,以便在R中匹配

将数字字符串转换为数字,以便在R中匹配,r,string,loops,math,sequence,R,String,Loops,Math,Sequence,我有一个问题,我想看看一个字符串是否是一个增加1的序列。也就是说,任意两个连续数字之间的差值为1。字符串为折叠形式: 91011 89909192 18192123 其中前两个是增加1的字符串,但第三个不是。这是因为91010是9,10,11,89909192是89,90,91,92。然而18192123是18,19,21,23,所以差异大于1 如何检查上述示例中的每个字符串(以及一般情况下)是否增加1,或者是否使用R 当然,我们假设最大字符串长度为32,因此 9999999999999998

我有一个问题,我想看看一个字符串是否是一个增加1的序列。也就是说,任意两个连续数字之间的差值为1。字符串为折叠形式:

91011
89909192
18192123
其中前两个是增加1的字符串,但第三个不是。这是因为91010是9,10,11,89909192是89,90,91,92。然而18192123是18,19,21,23,所以差异大于1

如何检查上述示例中的每个字符串(以及一般情况下)是否增加1,或者是否使用R

当然,我们假设最大字符串长度为32,因此

99999999999999989999999999999999
是连续数字增加1的最长字符串,因为我们有9999999999999 8,然后是9999999999999,长度为2x16位


所以最坏的情况是我们需要得到16个循环,我想,但我不确定是否有更简单的方法,然后为16个循环中的每一个添加序列和粘贴。

您可以尝试使用递归函数:您得到第一个数字,尝试添加下一个数字,直到达到所需的长度,如果不起作用,请重试,取前两位数字,依此类推:

cons_d <- function(str, nb=1) {
    l_str <- nchar(str)
    if(nb>=l_str) return("No") # if the number of digits you're trying is more than the length of strings then return "No"
    n1 <- as.numeric(substr(str, 1, nb))
    i <- 1
    while(nchar(n2 <- paste(n1:(n1+i), collapse=""))<l_str) {i <- i+1}
    if(n2==str) return("yes") else cons_d(str, nb+1) # if you get the right string, return yes, else, try again with one more digit
}

你怎么知道什么时候把一个字符串分解成组成数?AKA,你是如何解析字符串的?输入是一个文本文件,如果你是这样要求的话。具有这些字符串的列表,并将它们作为字符导入。否。我的意思是你怎么知道把9999999分解成9,99,999而不是9,9,9,9,9,9。这两个都是同样有效的解析,都没有通过您的要求。我尝试的是取第一个数字,加上1,然后再加上1,然后循环,直到新字符串的长度与原始字符串的长度相同。e、 取9,然后加1到10。然后把10放在9后面。然后继续,直到我有了相同的长度,也就是91011。同样,如果我在第三个例子中这样做,我会得到18,然后1819,然后181920,然后18192021,字符串长度匹配,但它们不相同,所以t工作,但必须尝试更改第一个数字,直到它占用字符串长度的一半,然后再次执行该过程。作为你的参数的反例,99100将失败,但它是有效的。9+1等于10而不是91。但是99+1等于100,这就是这个字符串的创建方式。在尝试任何R代码或任何语言之前,都需要先修复解析逻辑。是的!正是我需要的谢谢你!我正在这样做,但是代码行太多了。喜欢substr而不是扩展循环。
cons_d("91011")
[1] "yes"
cons_d("89909192")
[1] "yes"
cons_d("18192123")
[1] "No"