我有一个包含德语特殊字符(
ä
、ö
、ü
、ß
)和其他特殊字符(括号()
、/
、\
等)的数据集:
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
由于特殊字符(尤其是括号),我遇到了问题。
还有其他方法可以解决这个问题吗?
使用
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)