【问题标题】:Writing a user-defined function that accepts an oldstring, searches a dataframe column, and replaces with a newstring编写一个接受旧字符串、搜索数据框列并替换为新字符串的用户定义函数
【发布时间】:2017-05-17 19:35:57
【问题描述】:

我有一个数据集blah,其中有一列kw。有数以万计的字符串,其中一些是句子长度。我已经用for 循环替换了我想要替换的绝大多数内容,用子字符串类别替换子字符串。但是,我不可能想到所有需要替换的子字符串——虽然大部分繁重的工作已经完成,但只有大量的边缘情况,我想在它们出现时处理它们。

我想创建一个函数cleanup,我可以在其中传递一个oldsubstring和一个newsubstring,该函数将用newsubstring替换blah$kw中的oldsubstring实例。

这是我目前所写的:

cleanup <- function(oldstring, 
                    newstring) {
           blah$kw[grepl(oldstring, 
                         blah$kw)] <- sapply(blah$kw[grepl(oldstring, 
                                                           blah$kw)],
                                             function(x) gsub(oldstring,
                                                              newstring, 
                                                              x))
}

这可能看起来很愚蠢,我不知道——我对 R 很陌生。但我是基于我找到的一次性代码,它在这里:

blah$kw[grepl(oldstring, 
              blah$kw)] <- sapply(blah$kw[grepl("oldstring", 
                                                 blah$kw)],
                                  function(x) gsub("oldstring",
                                                   "newstring", 
                                                   x))
}

这就像一个魅力。无论如何,任何帮助都会很大。谢谢!

【问题讨论】:

    标签: r gsub string-substitution


    【解决方案1】:

    通常最好的做法是不要将数据集硬编码到函数中并将其作为变量传递。您正在寻找的可以通过子集来完成

    cleanup <- function(df1, oldstring, newstring) {
      df1[grepl(oldstring, df1)] <- gsub(oldstring, newstring, df1[grepl(oldstring, df1)])
      df1
    }
    
    blah$bw <- cleanup(blah$bw, "a", "y")
    

    注意:如果您的字符串被存储为因子,这将不起作用

    【讨论】:

    • 谢谢,这看起来可以很好地覆盖它!感谢您提供有关不进行硬编码的提示。
    猜你喜欢
    • 2020-01-06
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多