Gsub 到 gsubfn,它是如何传递的?
Gsub to gsubfn, how does it transfer?
我正在清理我的数据集并删除字母等的所有重音。为了做到这一点,我使用 gsub(见下面的代码)。它工作得很好,但我相信有更方便的方法来做到这一点。我听说过 gsubfn 但我一直无法弄清楚它是如何工作的。关于此或任何其他提高此代码效率的方法的提示?
Ech_final$lastname.y <- gsub(' ', "", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("'", "", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("/", "", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Ë", "E", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("É", "E", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("È", "E", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Ç", "C", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("À", "A", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Ù", "U", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Œ", "OE", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Ï", "I", Ech_final$lastname.y)
谢谢!
这里有几种选择。第一个根据问题的主题行的要求使用 gsubfn
。接下来的两个使用 iconv
或 chartr
用于替换为一个字符的替换,而 gsub
用于剩余的替换。最后两个使用 gsub
用于所有使用 Reduce
或循环的替换。
1) gsubfn gsubfn
像这样使用,其中第一个参数表示匹配每个字符,第二个是翻译列表,第三个是输入。
library(gsubfn)
x <- " '/ËÉÈÇÀÙŒÏ" # input
L <- list(" " = "", "'" = "", "/" = "", Ë = "E", É = "E", È = "E",
Ç = "C", À = "A", Ù = "U", Œ = "OE", Ï = "I")
gsubfn(".", L, x)
## [1] "EEECAUOEI"
2) gsub/iconv 另一种方法是将 gsub
与 iconv
混合使用(对于替换不是一个字符的情况)。输入x
定义如上
Encoding(x) # note the encoding
## [1] "latin1"
x |>
gsub(pattern = "Œ", replacement = "OE") |>
gsub(pattern = "[ '/]", replacement = "") |>
iconv("latin1", "ascii//translit")
## [1] "EEECAUOEI"
3) gsub/chartr 第三种选择与 (2) 相同,只是我们使用 chartr
代替 iconv
。输入x
定义如上
x |>
gsub(pattern = "Œ", replacement = "OE") |>
gsub(pattern = "[ '/]", replacement = "") |>
chartr(old = "ËÉÈÇÀÙÏ", new = "EEECAUI")
## [1] "EEECAUOEI"
4) gsub/Reduce 此替代方案执行问题中显示的 gsub
调用,但使用 Reduce
以更紧凑的形式执行.列表 L
和输入 x
来自 (1).
Reduce(function(s, nm) gsub(nm, L[[nm]], s), names(L), x)
## [1] "EEECAUOEI"
5) gsub/for 可以使用一个简单的 for
循环来 运行 问题中的 gsub
调用。列表 L
和输入 x
来自 (1).
xx <- x
for(nm in names(L)) xx <- gsub(nm, L[[nm]], xx)
xx
## [1] "EEECAUOEI"
我正在清理我的数据集并删除字母等的所有重音。为了做到这一点,我使用 gsub(见下面的代码)。它工作得很好,但我相信有更方便的方法来做到这一点。我听说过 gsubfn 但我一直无法弄清楚它是如何工作的。关于此或任何其他提高此代码效率的方法的提示?
Ech_final$lastname.y <- gsub(' ', "", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("'", "", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("/", "", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Ë", "E", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("É", "E", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("È", "E", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Ç", "C", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("À", "A", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Ù", "U", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Œ", "OE", Ech_final$lastname.y)
Ech_final$lastname.y <- gsub("Ï", "I", Ech_final$lastname.y)
谢谢!
这里有几种选择。第一个根据问题的主题行的要求使用 gsubfn
。接下来的两个使用 iconv
或 chartr
用于替换为一个字符的替换,而 gsub
用于剩余的替换。最后两个使用 gsub
用于所有使用 Reduce
或循环的替换。
1) gsubfn gsubfn
像这样使用,其中第一个参数表示匹配每个字符,第二个是翻译列表,第三个是输入。
library(gsubfn)
x <- " '/ËÉÈÇÀÙŒÏ" # input
L <- list(" " = "", "'" = "", "/" = "", Ë = "E", É = "E", È = "E",
Ç = "C", À = "A", Ù = "U", Œ = "OE", Ï = "I")
gsubfn(".", L, x)
## [1] "EEECAUOEI"
2) gsub/iconv 另一种方法是将 gsub
与 iconv
混合使用(对于替换不是一个字符的情况)。输入x
定义如上
Encoding(x) # note the encoding
## [1] "latin1"
x |>
gsub(pattern = "Œ", replacement = "OE") |>
gsub(pattern = "[ '/]", replacement = "") |>
iconv("latin1", "ascii//translit")
## [1] "EEECAUOEI"
3) gsub/chartr 第三种选择与 (2) 相同,只是我们使用 chartr
代替 iconv
。输入x
定义如上
x |>
gsub(pattern = "Œ", replacement = "OE") |>
gsub(pattern = "[ '/]", replacement = "") |>
chartr(old = "ËÉÈÇÀÙÏ", new = "EEECAUI")
## [1] "EEECAUOEI"
4) gsub/Reduce 此替代方案执行问题中显示的 gsub
调用,但使用 Reduce
以更紧凑的形式执行.列表 L
和输入 x
来自 (1).
Reduce(function(s, nm) gsub(nm, L[[nm]], s), names(L), x)
## [1] "EEECAUOEI"
5) gsub/for 可以使用一个简单的 for
循环来 运行 问题中的 gsub
调用。列表 L
和输入 x
来自 (1).
xx <- x
for(nm in names(L)) xx <- gsub(nm, L[[nm]], xx)
xx
## [1] "EEECAUOEI"