【问题标题】:Extracting numbers from column with string connected through repeated punctuation character从通过重复标点字符连接的字符串的列中提取数字
【发布时间】:2021-05-06 12:50:57
【问题描述】:

我有一列的值如下:

string.b.string.1.
string.b.string.2.
string.b.string.3.
string.b.string.10.
string.b.string.300.

以此类推,数字从 0 到 300

我需要从该列中提取并删除数字并将其放入另一列中,从而产生如下输出:

"Id"          "Variable"   
1             string.b.string
2             string.b.string
3             string.b.string
10            string.b.string
300           string.b.string

到目前为止,我对 gsub() 或 readr::parse_number() 的所有尝试都失败了,因为我只是不了解这些 gsub() 函数的语法。我通常失败了,因为“。”在变量中重复...

非常感谢任何帮助,谢谢!

【问题讨论】:

    标签: r gsub


    【解决方案1】:

    你可以使用tidyr::extract

    tidyr::extract(df, V1, c('Variable', 'Id'), '(.*?)(\\d+)', convert = TRUE) 
    
    #          Variable  Id
    #1 string.b.string.   1
    #2 string.b.string.   2
    #3 string.b.string.   3
    #4 string.b.string.  10
    #5 string.b.string. 300
    

    数据

    df <- structure(list(V1 = c("string.b.string.1.", "string.b.string.2.", 
    "string.b.string.3.", "string.b.string.10.", "string.b.string.300."
    )), class = "data.frame", row.names = c(NA, -5L))
    

    【讨论】:

    • 非常感谢!是否可以详细说明 '(.*?)(\\d+)' 到底是做什么的?
    • 第一列是所有内容,直到遇到一个数字,即 (.*?) 部分,第二列是数字,即 (\\d+)。 .
    【解决方案2】:

    您可以使用 base 中的strcapture

    strcapture("(.*)\\.(\\d+)", df$V1,
     data.frame(Variable=character(), Id=integer()))
    #         Variable  Id
    #1 string.b.string   1
    #2 string.b.string   2
    #3 string.b.string   3
    #4 string.b.string  10
    #5 string.b.string 300
    

    【讨论】:

      【解决方案3】:

      使用base R

      read.csv(text = sub("(.*)\\.(\\d+)\\.$", "\\1,\\2", df$V1), header = FALSE,
            col.names = c('Variable', 'Id'))
      

      -输出

      #         Variable  Id
      #1 string.b.string   1
      #2 string.b.string   2
      #3 string.b.string   3
      #4 string.b.string  10
      #5 string.b.string 300
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-21
        • 2018-12-14
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-13
        • 2017-05-22
        相关资源
        最近更新 更多