我有一個 255 行的查找表 - 值 | 替代品。它是一個 html 代碼表(例如 對應于空格字符 ' ')。表名:查找
我的表中有 6 列(共 50 列)包含需要替換以提高可讀性的 HTML 字符,它目前有 600 行但可能會增長。表名:exp
我提出的代碼基于 dplyr 和 for 回圈:它在查找表中逐行檢查目標變數中的匹配項。
len <- nrow(lookup)
for (i in 1:len){
exp <- exp %>%
mutate_at(vars(c(var1, var2, var3, var4, var6, var8)),
funs(gsub(pattern = lookup[i,1], replacement = lookup[i,2], x = .)))
}
運行需要相當長的時間,我想知道是否有更有效的方法來運行替換?
添加資料示例以供將來參考
抬頭:
Pattern Replacement
¢ ¢
& &
® ?
&trade ?
© ?
¤t; ¤
> >
< <
€ €
" “
' ‘
經驗:
> example
# A tibble: 3 x 4
`Example 1` `Example 2` `Example 3` `Example 4`
<chr> <chr> <chr> <chr>
1 ¢ It denotes Cent Sign of currency &tradeTrade Mark >It denotes greater than sign €It defines the British Euro ~
2 &It denotes frequently used Ampersan~ ©Gives Copy-right Symbol <It denotes lesser than sign "Gives double quotes in a giv~
3 ®Gives Registered Symbol ¤t; It defines a Generic currenc~ It defines for Non-Breaking~ 'Includes Apostrophe in a sen~
uj5u.com熱心網友回復:
使用stri_replace_all_fixedfrom stringi,您可以一次替換多個模式。語法有點混亂,但是當你設定vectorise_all = FALSE它時,它會用相應的替換替換所有模式的所有實體。
首先,讓我們創建一些示例資料,因為您沒有提供任何資料:
library(tidyverse)
set.seed(1)
exp <- data.frame(matrix(sample(LETTERS, 1000, replace = TRUE), ncol = 100))
lookup <- tribble(
~pattern, ~replacement,
"A", ":",
"F", " ",
"Y", "Test"
)
使用mutate across這是mutate_at這種情況下的新版本(mutate_at正在逐步淘汰):
exp %>%
mutate(across(c(X1, X3), ~ stringi::stri_replace_all_fixed(
str = .x,
pattern = lookup[["pattern"]],
replacement = lookup[["replacement"]],
vectorise_all = FALSE
))) %>%
as_tibble()
#> # A tibble: 10 × 100
#> X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 Test A U L T Y N H M V W B U
#> 2 D U E O T W B F H L S J L
#> 3 G U I A Z X M W Y P V A G
#> 4 : J Test T L F R L P A R K X
#> 5 B V N C Y Z V F Y M Z Z U
#> 6 W N E F W G N H W U P O V
#> 7 K J E J F S F G N F K Z H
#> 8 N G B J Y J A K T Q J X A
#> 9 R I J F H F S Q G I G J S
#> 10 S O Test O L X S D M G S P Z
#> # … with 87 more variables: X14 <chr>, X15 <chr>, X16 <chr>, X17 <chr>,
#> # X18 <chr>, X19 <chr>, X20 <chr>, X21 <chr>, X22 <chr>, X23 <chr>,
#> # X24 <chr>, X25 <chr>, X26 <chr>, X27 <chr>, X28 <chr>, X29 <chr>,
#> # X30 <chr>, X31 <chr>, X32 <chr>, X33 <chr>, X34 <chr>, X35 <chr>,
#> # X36 <chr>, X37 <chr>, X38 <chr>, X39 <chr>, X40 <chr>, X41 <chr>,
#> # X42 <chr>, X43 <chr>, X44 <chr>, X45 <chr>, X46 <chr>, X47 <chr>,
#> # X48 <chr>, X49 <chr>, X50 <chr>, X51 <chr>, X52 <chr>, X53 <chr>, …
由reprex 包于 2022-02-16 創建(v2.0.1)
這是我相信的最快速度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424717.html
上一篇:資料框不會在for回圈中修改
下一篇:無法遍歷檔案?
