【问题标题】:Stripping non A-Z characters in vector in R在 R 中去除向量中的非 A-Z 字符
【发布时间】:2011-11-24 10:34:48
【问题描述】:

我有一个包含非 A-Z 字符的用户名向量。 我希望能够去掉这些字符。 有人告诉我使用字母向量,但 y =x[letters] 似乎不起作用。

谢谢

【问题讨论】:

    标签: r letters


    【解决方案1】:

    如果x 是您的向量,请使用一对简单的范围正则表达式和gsub,并将所有内容替换为空字符串。使用^ 给出模式的否定:

    gsub("[^a-zA-Z]", "", x)
    

    例如,一些简单的数据。

     gsub("[^a-zA-Z]", "", c(letters, LETTERS, "3s8t7a2c9k:o3v8e7r%F%L^O#W%&^%@#^"))
     [1] "a"             "b"             "c"             "d"             "e"             "f"             "g"             "h"            
     [9] "i"             "j"             "k"             "l"             "m"             "n"             "o"             "p"            
    [17] "q"             "r"             "s"             "t"             "u"             "v"             "w"             "x"            
    [25] "y"             "z"             "A"             "B"             "C"             "D"             "E"             "F"            
    [33] "G"             "H"             "I"             "J"             "K"             "L"             "M"             "N"            
    [41] "O"             "P"             "Q"             "R"             "S"             "T"             "U"             "V"            
    [49] "W"             "X"             "Y"             "Z"             "stackoverFLOW"
    

    【讨论】:

      【解决方案2】:

      也许这就是你想要的

      username <- "user12_AB"
      strip_non_letters <- function(s) {
        idx <- which(strsplit(tolower(s),"")[[1]] %in% letters)
        paste(strsplit(s, "")[[1]][idx], collapse="")
      }
      strip_non_letters(username)
      

      【讨论】:

      • 这种说法是有道理的,但我仍在学习,所以其中一些没有意义。我试试看能不能看懂。
      【解决方案3】:

      和上面的 Karsten 类似,希望不要太冗长

          usernames <- c("A!ex25","Goerge?","H@rry","Dumbname89")
          # a function to cut out non-letters
          onlyletters <- function(x){
          chars <- unlist(strsplit(x,split=""))
          charsout <- chars[chars%in%c(letters,LETTERS)]
          paste(charsout,sep="",collapse="")
          }
          sapply(usernames,onlyletters)
          > A!ex25    Goerge?      H@rry Dumbname89 
          > "Aex"   "Goerge"     "Hrry" "Dumbname" 
      

      【讨论】:

      • 谢谢。冗余实际上有帮助。试图把我的头绕过去。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      相关资源
      最近更新 更多