【问题标题】:replacing all characters between two patterns in r替换r中两个模式之间的所有字符
【发布时间】:2019-03-13 18:50:47
【问题描述】:

我有一个包含以下列的数据框:

  Col_A
tr_1 A1; gn_1 TG1;
tr_2 A2; gn_2 TG2;
tr_3 A3; gn_3 TG3;
tr_4 A4; gn_4 TG4;
tr_5 A5; gn_5 TG5;

我想使用 gsub 命令和正则表达式删除所有数据帧行中字符串“gn_1”开头到结尾的所有字符。或者用“”替换所有这些字符。

我想要的最后是这样的:

 Col_A
 TG1
 TG2
 TG3
 TG4
 TG5

你知道我如何在 r 中做到这一点。

【问题讨论】:

  • 试试sub("^.*gn_\\d+\\s([[:alnum:]]+).*$", "\\1", x)

标签: r regex dataframe gsub


【解决方案1】:

下面的正则表达式会做你想做的事。

sub("^.*gn_\\d+\\s([[:alnum:]]+).*$", "\\1", df1$Col_A)
#[1] "TG1" "TG2" "TG3" "TG4" "TG5"

dput 格式的数据。

df1 <-
structure(list(Col_A = structure(1:5, 
.Label = c("tr_1 A1; gn_1 TG1;", "tr_2 A2; gn_2 TG2;", 
"tr_3 A3; gn_3 TG3;", "tr_4 A4; gn_4 TG4;", 
"tr_5 A5; gn_5 TG5;"), class = "factor")), 
class = "data.frame", row.names = c(NA, -5L))

【讨论】:

    【解决方案2】:

    您始终可以使用stringi 包:

    library(stringi)
    stri_extract_last_words(df1$Col_A)
    [1] "TG1" "TG2" "TG3" "TG4" "TG5"
    

    编辑:只需重新阅读您的问题,(假设gn_# 后面总是有一个单词,请谨慎使用)

    【讨论】:

      【解决方案3】:

      我通过以下命令得到了我想要的。如果有人在寻找答案,我将其发布在这里。

      DF$col &lt;- gsub("^tr.*gn_. ", "", DF$col)

      DF$col &lt;- gsub(";", "", DF$col)

      【讨论】:

        猜你喜欢
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2016-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        相关资源
        最近更新 更多