【问题标题】:How to extract the trailing digits from a string in R? [duplicate]如何从R中的字符串中提取尾随数字? [复制]
【发布时间】:2018-12-10 16:21:30
【问题描述】:

我有一列数据如下所示:

**varX**

Q1#_1

Q1#_5

Q1#_10

我想将数据编辑成如下所示:

**varX**

1

5

10

我可以使用一个命令来简单地保留下划线后面的所有信息吗?

【问题讨论】:

  • 您可以使用gsub(".*_(\\d+)", "\\1", df$varX)即使您的字符串开头的模式发生变化,它也会起作用。

标签: r string character


【解决方案1】:

如果您想要tidyverse 解决方案,可以使用stringr 包中的str_extract

data %>% 
mutate(varx = str_extract(varx, "[0-9]+$")) %>%
mutate(varx = as.numeric(varx)) # include this last line if you want a number and not character

【讨论】:

    【解决方案2】:

    如果你总是有 Q1#_ 字符串,你可以这样做:

    gsub("Q1#_", "", df$varX)
    

    【讨论】:

      【解决方案3】:

      我认为您正在寻找sub,将字符串的某个部分替换为其他内容。如果你想花哨,你可以给它一个正则表达式,或者只是给它一个文字:

      VarX <- sub('Q1#_', '', VarX, fixed=T)
      

      奇特的方式(“删除之前包括下划线在内的所有内容”)是

      VarX <- sub('^.*_', '', VarX)
      

      您可能希望将其转换为数字或整数:

      VarX <- as.integer(sub('Q1#_', '', VarX, fixed=T)) # or as.numeric
      

      【讨论】:

        【解决方案4】:

        你可以使用正则表达式

        df[["varX"]] <- sub(".+_", "", df[["varX"]])
        df
          varX
        1    1
        2    5
        3   10
        

        无正则表达式: strsplit():

        df[["varX"]] <- sapply(df[["varX"]], function(x) strsplit(x, "_")[[c(1,2)]])
        

        【讨论】:

          猜你喜欢
          • 2023-03-06
          • 1970-01-01
          • 2017-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-10
          相关资源
          最近更新 更多