【问题标题】:Replacing elements within a string in R替换R中字符串中的元素
【发布时间】:2010-05-24 20:40:09
【问题描述】:

我在 R 的数据框中有一行,它由长度不确定的 0s 1s 和 2s 作为字符的序列组成。所以“01”,“010”,“201”,“102”,“00012”......这样的事情。

我想找到一种方法来确定字符串中的最后一个字符是否在数字上是最大的。重要的是,我将数据框中的行作为字符保留用于其他目的。所以基本上我想取substr(x, nchar(x), nchar(x)) 并确定它作为一个数字是否是字符串中最大的数字。

我对如何做到这一点感到非常迷茫,因为我对正则表达式并不是很熟悉,而且我必须在处理字符和数字等元素之间来回走动。

提前致谢。

~莫琳

【问题讨论】:

    标签: r


    【解决方案1】:

    df为数据框的名称,字符串序列“01”、“010”、“201”、“102”、“00012”的行为第二。如果字符串中的最后一个字符在数字上是最大的,则可以得到一个向量来回答这个问题:

    sapply(strsplit(as.character(df[2,]),""),function(x) x[length(x)] >= max(x))
    [1]  TRUE FALSE FALSE  TRUE TRUE
    

    【讨论】:

      【解决方案2】:

      一种方法是

      p <- as.numeric(strsplit("0120102","")[[1]])
      if (max(p) == p[length(p)]) {
         print("yes")
      }
      

      其实你可以忽略 as.numeric() 因为 "2" > "1" > "0":

      p <- strsplit("0120102", "")[[1]]
      

      如果您想将此应用于您的 data.frame A:

      apply(A, c(1,2), function(z) {p<-strsplit(z, "")[[1]];(max(p) == p[length(p)])})
      

      【讨论】:

        【解决方案3】:

        正则表达式将是 [0-9]$ 来获取最后一个数字,其余逻辑取决于您正在开发的环境。

        【讨论】:

          【解决方案4】:

          我认为你最好看看正则表达式在 R 语言中是如何工作的:

          http://www.regular-expressions.info/rlanguage.html
          

          就像 Dan Heberden 在上面的帖子中所说,您需要标记您在帖子中作为示例提供的字符串,然后 grep( ...? ) 正则表达式 "[0-9]$ 的标记”。顺便说一句,使用正则表达式,您可以将所有内容都视为字符,因此您不必在数字和字符模式之间来回穿梭,除非您获取 grep 函数的结果并将其解析为您的数字形式比较。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-06
            • 2015-11-19
            相关资源
            最近更新 更多