如何使用R将所有包含"to"的变量变异?

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

以下是我try 过的:

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

这将适用于我能想到的大多数情况.

提前感谢.

推荐答案

你应该用gsubstringr::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

R相关问答推荐

判断字符串中数字的连续性

如何修复R码的置换部分?

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

在"gt"表中添加第二个"groupname_col",而不连接列值

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

通过在colname中查找其相应值来创建列

找出二叉树中每个 node 在R中的深度?

以相同的方式对每个表进行排序

展开对数比例绘图的轴(添加填充)

您是否可以使用facet_rap设置一个较低的限制来对ggmap上的比例中断进行zoom ?

使用RSelenium在R中抓取Reddit时捕获多个标签

将标识符赋给事件序列,避免错误观察

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

ArrangeGrob()和类似的替代方法不接受Grob列表.在Grid.Draw,返回:glist中的错误(...):仅允许在glist";中使用Grobs;

对数据帧中的列进行子集设置以通过迭代创建新的数据帧

如果y中存在x中的值,则将y行中的多个值复制到相应的x行中

如何从矩阵绘制环弦图

按顺序将地块添加到列表

如何计算物种矩阵中一行中的唯一个数?

使用for()循环将数据处理应用于数据集的所有行