在 R 中用特殊字符替换字符串

问题描述 投票:0回答:1

我有一个包含德语特殊字符(

ä
ö
ü
ß
)和其他特殊字符(括号
()
/
\
等)的数据集:

df <- data.frame(
id = 1:8,
date = seq.Date(as.Date("2024-12-01"), as.Date("2024-12-08"), "day"),
group = rep(LETTERS[1:2], 4),
text1 = c("Österreichische Botschaft", "Außenministerium", "Bundesheer", "Präsident",
          "Bundesregierung / Bundeskanzler", "Parteien", "Justiz", 
          "Erwerbstätig (unselbständig)")
)

我有另一个包含原始字符串和替换字符串的数据集:

df_replace <- data.frame(
original = c("Österreichische Botschaft", "Außenministerium", "Präsident",
             "Bundesregierung / Bundeskanzler", "Parteien", "Justiz", 
             "Erwerbstätig (unselbständig)"),
replacement = c("Austrian embassy", "Foreign ministry", "President",
                "Government / Chancellor", "Parties", "Judiciary", "Working (employed)")
)

我现在想使用

df
数据集替换
df_replace
中的所有字符串。

使用

stringi::stri_replace_all_fixed
效果很好,只要
df
df_replace
数据集中的行数相同。但我的
df
却不是这样。

因此,我收到以下错误消息:

Caused by warning in "stringi::stri_replace_all_fixed()": ! longer object length is not a multiple of shorter object length

使用以下代码也不起作用:

df |> mutate_all(\(x) stringr::str_replace_all(x, df_replace$original,
                                                  df_replace$replacement))

因为使用

stringr::str_replace_all
由于特殊字符(尤其是括号),我遇到了问题。

还有其他方法可以解决这个问题吗?

r string replace special-characters
1个回答
0
投票

使用

match

的方法
transform(df, repl = df_replace$replacement[match(text1, df_replace$original)])

输出

  id       date group                           text1                    repl
1  1 2024-12-01     A       Österreichische Botschaft        Austrian embassy
2  2 2024-12-02     B                Außenministerium        Foreign ministry
3  3 2024-12-03     A                      Bundesheer                    <NA>
4  4 2024-12-04     B                       Präsident               President
5  5 2024-12-05     A Bundesregierung / Bundeskanzler Government / Chancellor
6  6 2024-12-06     B                        Parteien                 Parties
7  7 2024-12-07     A                          Justiz               Judiciary
8  8 2024-12-08     B    Erwerbstätig (unselbständig)      Working (employed)
© www.soinside.com 2019 - 2024. All rights reserved.