如何使用 R 将所有包含 ′ 的变量突变为 '?
df <- data.frame(
S=c("1′,@","2′2′abc","3:ae′","′4~@e′","55′","6:ae′"),
Q=c("AAA′E","BEAA′","CA′′B","D:DDF","EE@′A","FFSS")
)
S Q
1 1′,@ AAA′E
2 2′2′abc BEAA′
3 3:ae′ CA′′B
4 ′4~@e′ D:DDF
5 55′ EE@′A
6 6:ae′ FFSS
所需输出:
S Q
1 1',@ AAA'E
2 2'2'abc BEAA'
3 3:ae' CA''B
4 ′4~@e' D:DDF
5 55' EE@'A
6 6:ae' FFSS
这是我尝试过的:
library(tidyverse)
library(dplyr)
df %>%
mutate(
dplyr::across(
.cols = everything(),
.fns = ~ dplyr::if_else(stringr::str_detect(.x, "′"), "'", .x)
)
)
返回
S Q
1 ' '
2 ' '
3 ' '
4 ' D:DDF
5 ' '
6 ' FFSS
有人可以建议如何更改语法以使其工作吗?
如果解决方案扩展到也能变异,那将非常有帮助
: to ^
@ in df$S to a
AA to aa
因为它将适用于我能想到的大多数情况。
提前致谢。
您应该使用
gsub
或 stringr::str_replace_all
而不是 ifelse
。
library(dplyr)
df %>%
mutate(across(everything(), ~ gsub("′", "'", .x)))
# S Q
# 1 1',@ AAA'E
# 2 2'2'abc BEAA'
# 3 3:ae' CA''B
# 4 '4~@e' D:DDF
# 5 55' EE@'A
# 6 6:ae' FFSS
要在每个字符串中执行多次替换,您可以将命名向量
c(pattern1 = replacement1)
传递给 str_replace_all
。
df %>%
mutate(
S = str_replace_all(S, "@", "a"),
across(everything(), ~ str_replace_all(.x, c("′" = "'", ":" = "\\^", "AA" = "aa")))
)
# S Q
# 1 1',a aaA'E
# 2 2'2'abc BEaa'
# 3 3^ae' CA''B
# 4 '4~ae' D^DDF
# 5 55' EE@'A
# 6 6^ae' FFSS