当前位置: 首页 > 知识库问答 >
问题:

与cur_column匹配的第n个字符中的mutate(跨())中的str_replace

壤驷德寿
2023-03-14

我的目标概述

my.df <-data.frame("col1_A.C"=c("AA","AC","CC"),
                   "col2_A.T"=c("TT","AT","TT"),
                   "col3_C.G"=c("GG","CG","CG"))

my.df
#   col1_A.C col2_A.T col1_C.G
# 1       AA       TT       GG
# 2       AC       AT       CG
# 3       CC       TT       CG
my.df2 <- data.frame("col1_A.C"=c("RR","RC","CC"),
                   "col2_A.T"=c("TT","RT","TT"),
                   "col3_C.G"=c("GG","RG","RG"))

my.df2
#   col1_A.C col2_A.T col1_C.G
# 1       RR       TT       GG
# 2       RC       RT       RG
# 3       CC       TT       RG

为了实现这一点,我生成了以下代码

my.df2 <- my.df %>% mutate(across(.cols=everything(),
                                  .funs=str_replace_all(.,
                                                        substr(cur_column(),
                                                               nchar(cur_column()-2),
                                                               nchar(cur_column()-2)
                                                              ),
                                                        "R")
                                  )
                           )

不幸的是,结果的dataframe,My.df2看起来与My.df完全相同,并且没有发生字符替换。但不会返回任何错误。

我以以下方式测试了str_replace_all()方法,它在一个向量上起作用。我想,在mutate(cross())函数中解释str_replace_all()的方式中,我遗漏了/不理解一些东西。

first.column <- c("CC","CT","CC")

first.column <- str_replace_all(first.column,
                                substr(colnames(my.df)[1],
                                       nchar(colnames(my.df)[1])-2,
                                       nchar(colnames(my.df)[1])-2
                                       ),
                                "R")
print(first.column)
# [1] "RR" "RT" "RR"

我已经想不出什么可能不起作用了。我对R及其功能的理解不是很透彻,所以如果我错过了一些简单的东西,我向您道歉。我也找过类似的问题,但没有结果。

共有1个答案

佟阳云
2023-03-14

您可以使用映射:

my.df[] <- Map(function(x, y) gsub(y, 'R', x), my.df, 
      substring(names(my.df), nchar(names(my.df)) - 2,nchar(names(my.df)) - 2))

my.df
#  col1_A.C col2_A.T col3_C.G
31       RR       TT       GG
#2       RC       RT       RG
#3       CC       TT       RG

使用@thelatemail的chartr技巧与imap_dfc中的purrr

purrr::imap_dfc(my.df, ~chartr(substr(.y, nchar(.y)-2, nchar(.y)-2), 'R', .x))
 类似资料:
  • 我正在处理一个关于codingbat的问题,这个问题说:给定一个字符串和第二个“单词”字符串,我们会说这个单词匹配字符串,如果它出现在字符串的前面,除了它的第一个字符不需要完全匹配...在匹配时,返回字符串的前面,或以其他方式返回空字符串。所以,所以用字符串“河马”,“嗨”这个词返回“嗨”,“xip”返回“臀部”。单词长度至少为1。我不能解决它,但在网上找到了一个解决方案,代码如下所示。代码工作,

  • 问题内容: 我正在尝试为下面的示例文本构建一个正则表达式,在其中我需要替换 粗体 文本。到目前为止,我可以实现这一点, 那就是选择第一个和最后一个pip char之间的整个字符串。我一定要使用apache或java regex。 示例字符串:管道之间的文本长度可能会有所不同 问题答案: 要在出现管道后匹配零件,可以使用此正则表达式: 在这里n = 3 它将与匹配的#1组匹配 正则演示

  • 问题内容: 如何编写一个与相同字符(或理想情况下,同一组)的N个重复恰好匹配的表达式?基本上是做什么的,但是有一个重要的限制:如果主题重复N次 以上, 则表达式应该失败。例如,给定和字符串,表达式应该匹配和不。 我不专注于任何特定的方言,可以随意使用任何语言。请不要发布仅适用于此特定示例的代码,我正在寻找一个通用的解决方案。 问题答案: 使用负前瞻 和 负后瞻。 这将是正则表达式:除了Python

  • 问题内容: 我认为我遇到了一个听起来比实际容易的问题……我不太确定。我想定义一个正则表达式,并且要构建一些与之匹配的字符串。 我可以导入具有该功能的任何模块吗?最好不要使用或暴力破解方法。必须有一种更优雅的方法来做到这一点。 问题答案: 我一直在研究一个小的帮助程序库,用于使用Python生成随机字符串 它包含一个方法,该方法允许您从正则表达式创建字符串: 目前,它适用于大多数基本正则表达式。

  • 我正在尝试编写一个模式,该模式将只匹配按字面解释的字符串的第一个字符(可以是任何字符,也可以是空白)。 给定这个函数,它使用“非常没有魔力”来匹配作为参数给出的字符串,然后高亮显示该字符串,我如何修改它,使它只高亮显示第一个字符? 例如,在下面的文本中调用,只会在后面跟着,而不是在任何其他地方突出显示。目前,它突出显示整个给定字符串。 Lorem ipsum do{^(lor sit amet,

  • 本文向大家介绍Python中的DI字符串匹配,包括了Python中的DI字符串匹配的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个仅包含“ I”(表示增加)或“ D”(表示减少)的字符串S,令N = S的大小。我们必须返回[0,1,... ,N]使得对于范围0,...,N-1中的所有i- 如果S [i]为“ I”,则A [i] <A [i + 1] 否则,当S [i]为“ D”时,则A [