簡體   English   中英

用R中的向量替換列表

[英]Replacing a list with a vector in R

我需要做很多替換。 我正在使用gsub。 我想知道是否有可能做一些事情,比如當我想用a替換所有é時,用e代替所有é:

gsub(c("á","é"),c("a","e"),"ána belén")

使用這個,我收到一個錯誤。

如果這是不可能的,還有其他功能嗎?

是的,有chartr

chartr("áé" ,"ae","ána belén")
# [1] "ana belen"

編輯因為你現在要求一個可以處理整個單詞的更通用的功能,這就是我要做的:

rgsub <- function(pattern, replacement, x) {
   ARGS <- Map(c, pattern = pattern, replacement = replacement)
   FUN  <- function(x, y) gsub(y[['pattern']], y[['replacement']], x)
   Reduce(FUN, ARGS, x)
} 

為了表明它提供與qdap相同的結果,但速度更快:

i <- c("cat", "dog", "mouse")
j <- c("lion", "bulldog", "elephant")
k <- c("cat", "dog", "dog", "mouse", "ant", "mouse")

identical(mgsub(i, j, k), rgsub(i, j, k))
# [1] TRUE

library(microbenchmark)

microbenchmark(mgsub(i, j, k), rgsub(i, j, k))
# Unit: microseconds
#            expr    min       lq   median       uq      max neval
#  mgsub(i, j, k) 586.60 608.6920 629.7840 659.2415 1278.973   100
#  rgsub(i, j, k)  81.91  88.9305  97.0165 107.2390  229.835   100

qdap對於很多東西來說可能都很棒,但對於你的特定應用來說它可能qdap過分。

你可以用mgsubqdap

 library(qdap)
 mgsub(c("á","é"),c("a","e"),"ána belén")
 #[1] "ana belen"

另外,替換words

 mgsub(c("cat", "dog", "mouse"),c("lion", "bulldog", "elephant"),
                         c("cat", "dog", "dog", "mouse", "ant", "mouse"))
 #[1] "lion"     "bulldog"  "bulldog"  "elephant" "ant"      "elephant"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM