【问题标题】:R: Replace part of the string in one column with a string in another column in data.tableR:用data.table中另一列中的字符串替换一列中的部分字符串
【发布时间】:2023-03-20 05:08:01
【问题描述】:

我有以下两列 data.table;

library(data.table)
dt1 <- as.data.table(data.frame(
    relative.1 = c("up", "down", "up", "down", "down", 
      "up", "up", "up", "down", "down"), 
    color.1 = c(
        "<span style=     color: red !important; >0.00239377213823793</span>", 
        "<span style=     color: red !important; >0.0189475913373258</span>", 
        "<span style=     color: red !important; >0.000944874682014027</span>", 
        "<span style=     color: red !important; >0.00115563834695583</span>", 
        "<span style=     color: red !important; >0.00190146895689528</span>", 
        "<span style=     color: red !important; >0.00905363339565874</span>", 
        "<span style=     color: red !important; >0.00786719465124788</span>", 
        "<span style=     color: red !important; >0.0021806607355806</span>", 
        "<span style=     color: black !important; >0.0677967189492317</span>", 
        "<span style=     color: black !important; >0.0643565809998716</span>"
    ), stringsAsFactors = FALSE))

我想将“>”和“

如果有任何指点,我将不胜感激。

【问题讨论】:

    标签: r replace data.table


    【解决方案1】:

    data.table 包使用更新就地操作符:= 让您能够有效地更新列。您可以参考 data.table 范围内的其他列。有多种方法可以对字符串进行编辑,虽然正则表达式是 not suitable for parsing HTML,但以下模式适用于您在此处的示例。

    dt1[, color.1 := stringr::str_replace(
        string = color.1, 
        pattern = "[0-9.]+", 
        replacement = relative.1)]
    dt1
    # relative.1                                                color.1
    #  1:         up     <span style=     color: red !important; >up</span>
    #  2:       down   <span style=     color: red !important; >down</span>
    #  3:         up     <span style=     color: red !important; >up</span>
    #  4:       down   <span style=     color: red !important; >down</span>
    #  5:       down   <span style=     color: red !important; >down</span>
    #  6:         up     <span style=     color: red !important; >up</span>
    #  7:         up     <span style=     color: red !important; >up</span>
    #  8:         up     <span style=     color: red !important; >up</span>
    #  9:       down <span style=     color: black !important; >down</span>
    # 10:       down <span style=     color: black !important; >down</span>
    

    【讨论】:

    • 关于“pattern = "[0-9.]+"" 的一个快速问题。您能解释一下在这种情况下“[0-9.]+”如何只选择数字字符吗?谢谢。
    • 如果你看一下?regex,就会有正则表达式的入门知识。它们是深入而强大的工具,但xkcd.com/1171[] 表示一组可供选择的值。 0-9 表示 0 到 9 范围内的所有值。+ 表示其中 1 个或多个一起,中间没有任何其他字符。
    【解决方案2】:
    dt1[, color.1 := sub('(?<=>)[0-9]+\\.[0-9]+(?=<)', relative.1, color.1, perl = TRUE), by = relative.1]
    
    #     relative.1                                                color.1
    #  1:         up     <span style=     color: red !important; >up</span>
    #  2:       down   <span style=     color: red !important; >down</span>
    #  3:         up     <span style=     color: red !important; >up</span>
    #  4:       down   <span style=     color: red !important; >down</span>
    #  5:       down   <span style=     color: red !important; >down</span>
    #  6:         up     <span style=     color: red !important; >up</span>
    #  7:         up     <span style=     color: red !important; >up</span>
    #  8:         up     <span style=     color: red !important; >up</span>
    #  9:       down <span style=     color: black !important; >down</span>
    # 10:       down <span style=     color: black !important; >down</span>
    

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 2020-11-03
      • 2020-11-09
      • 2014-06-03
      • 2020-07-28
      • 1970-01-01
      • 2011-03-25
      相关资源
      最近更新 更多