【问题标题】:Extracting nth character till the end of string in R提取第n个字符直到R中的字符串结尾
【发布时间】:2020-02-08 23:43:22
【问题描述】:

我正在尝试使用 R 提取字符串中的第 n 个字符。这是我的数据:

StringField
example_string1
example_string2
example_string3
example_string4
example_string5
example_string6
example_string7
example_string8
example_string9
example_string10
example_string11
example_string12

我只想提取 example_string 之后的数字,所以结果是:

1
2
3
4
5
6
7
8
9 
10
11
12

我已经尝试了一些类似的方法:

df$unique_number <- substr(df$stringField, 15:) 

表示我想要从第 15 位开始到字符串末尾的所有内容。关于完成我想做的事情的简单方法有什么想法吗?谢谢!

【问题讨论】:

  • 要尽量减少代码修改,只需将substr 替换为substring,即substring(df$stringField, 15)

标签: r


【解决方案1】:

这是一个使用sub 的简单选项。我们可以捕获输入中的最后一个数字,然后只替换为捕获的数量。

x <- "example_string10"
num <- sub("^.*?(\\d+)$", "\\1", x)
num

[1] "10"

【讨论】:

    【解决方案2】:
    x <- "example_string10"
    substr(x, 15, 20)
    #> [1] "10"
    

    reprex package (v0.3.0) 于 2020-02-06 创建

    【讨论】:

    • substrsubstring 可以应用于向量。不需要使用map
    • @DarrenTsai,谢谢你的提示。巧合的是,我正在阅读 RStudio 的 purrr 入门书并学习函数式编程,它似乎很合适。但是substr 对我来说是最简单的解决方案。但你是对的。我将删除帖子的第二部分。
    【解决方案3】:

    将每个非数字 (\D) 替换为空字符串并转换为数字:

    transform(df, unique_number = as.numeric(gsub("\\D", "", StringField)))
    

    注意

    我们用这个作为输入:

    df <- data.frame(StringField = c("example_string1", "example_string2",
      "example_string3"), stringsAsFactors = FALSE)
    

    【讨论】:

      【解决方案4】:
      df %>% tidyr::extract(StringField, into = "nmb", "([0-9]+)")
      

      【讨论】:

        【解决方案5】:

        如果您只想从字符串中提取数字,这可能是一个解决方案:

        library(stringr)
        
        as.numeric(str_extract(df$stringField,"\\d+"))
        

        【讨论】:

        • 嘿~str_extract可以应用于向量,所以不需要使用sapply,即as.numeric(str_extract(df$stringField, "\\d+")),对吧?
        • 是的,你是对的。我不知道为什么我添加了sapply。编辑了帖子。
        猜你喜欢
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多