我有一个包含字母[az],空格[]和撇号[']的字符串变量,例如.x <- "a'b c"
我想用blank []替换撇号['],并用下划线[_]替换space [].
x <- gsub("'", "", x)
x <- gsub(" ", "_", x)
它绝对有效,但是当我有很多条件时,代码变得丑陋.因此,我想使用chartr(),但chartr()不能处理空白,例如.
x <- chartr("' ", "_", x) 
#Error in chartr("' ", "_", "a'b c") : 'old' is longer than 'new'
有什么方法可以解决这个问题吗?谢谢!
Pet*_*ter 20
我的语法的粉丝%<>%,并%>%从opperators magrittr包提供.
library(magrittr)
x <- "a'b c"
x %<>%
  gsub("'", "", .) %>%
  gsub(" ", "_", .) 
x
##[1] "ab_c"
gusbfn很精彩,但我喜欢链接%>%允许.
Ron*_*hah 15
您可以使用 gsubfn
library(gsubfn)
gsubfn(".", list("'" = "", " " = "_"), x)
# [1] "ab_c"
ism*_*gal 14
我会使用stri_replace_all_fixed库(stringi)中相当快的函数:
library(stringi)    
stri_replace_all_fixed("a'b c", pattern = c("'", " "), replacement = c("", "_"), vectorize_all = FALSE)
这是考虑到大多数其他建议解决方案的基准:
library(stringi)
library(microbenchmark)
library(gsubfn)
library(mgsub)
library(magrittr)
library(dplyr)
x_gsubfn <-
x_mgsub <-
x_nested_gsub <-
x_magrittr <-
x_stringi <- "a'b c"
microbenchmark("gsubfn" = { gsubfn(".", list("'" = "", " " = "_"), x_gsubfn) },
               "mgsub" = { mgsub::mgsub(x_mgsub, c("'", " "), c("", "_")) },
               "nested_gsub" = { gsub("Find", "Replace", gsub("Find","Replace", x_nested_gsub)) },
               "magrittr" = { x_magrittr %<>% gsub("'", "", .) %>% gsub(" ", "_", .) },
               "stringi" = { stri_replace_all_fixed(x_stringi, pattern = c("'", " "), replacement = c("", "_"), vectorize_all = FALSE) }
               )
Unit: microseconds
        expr     min       lq      mean   median       uq     max neval
      gsubfn 458.217 482.3130 519.12820 513.3215 538.0100 715.371   100
       mgsub 180.521 200.8650 221.20423 216.0730 231.6755 460.587   100
 nested_gsub  14.615  15.9980  17.92178  17.7760  18.7630  40.687   100
    magrittr 113.765 133.7125 148.48202 142.9950 153.0680 296.261   100
     stringi   3.950   7.7030   8.41780   8.2960   9.0860  26.071   100
小智 7
我认为嵌套的 gsub 可以完成这项工作。
gsub("Find","Replace",gsub("Find","Replace",X))
小智 5
我知道它有点旧,但很难传递有效的基础 R 解决方案。只需使用管道:
test <- "abcegdfk461mnb"
test2 <- gsub("e|4|6","",test)
print(test2)