【问题标题】:Extract character values from strings of different lengths in a vector in R从R中向量中不同长度的字符串中提取字符值
【发布时间】:2020-12-31 00:09:33
【问题描述】:

我有一个如下所示的向量:

**name**
a1
a2
a3
b1_z
b2_3z
b32z

我希望输出只包含每个字符串中的字母,而不是任何数字或符号。像这样:

**name**
a
a
a
bz
bz
bz

我尝试过使用以下代码:

df$name <- stri_extract_all_regex(df$name, "[a-z]+") 

我得到这个结果:

**name**
a
a
a
c("b", "z")
c("b", "z")
c("b", "z") 

如何将两个单独字符串的值组合成一个字符串?特别是,当向量中的某些值已经只包含一个字符串时,我该怎么做?我也愿意接受其他解决方案来从绕过此问题的字符串中提取字符。

【问题讨论】:

  • 如果你想要删除的只是数字和下划线,那么gsub("\\d|_", "", df$name) 会这样做。

标签: r string tidyverse


【解决方案1】:

str_remove 的选项

library(stringr)
str_remove_all(df$name, "[0-9_]+")
#[1] "a"  "a"  "a"  "bz" "bz" "bz"

数据

df <- structure(list(name = c("a1", "a2", "a3", "b1_z", "b2_3z", "b32z"
)), class = "data.frame", row.names = c(NA, -6L))

【讨论】:

    【解决方案2】:

    您可以使用gsub 函数这样做:

    vals = c('a1', 'a2', 'b1_z', 'b2_3z')
    df = data.frame(vals)
    
    df$name = gsub("[^[:alpha:]]", "", df$vals)
    print(df)
    

    输出将如下所示:

      name
    1    a
    2    a
    3   bz
    4   bz
    

    【讨论】:

      【解决方案3】:

      请尝试gsub,如下所示

      df$name <- gsub("[^[:alpha:]]","",df$name)
      

      将非字母字符替换为""

      我们会得到

      > df
        name
      1    a
      2    a
      3    a
      4   bz
      5   bz
      6   bz
      

      数据

      > dput(df)
      structure(list(name = c("a1", "a2", "a3", "b1_z", "b2_3z", "b32z"
      )), class = "data.frame", row.names = c(NA, -6L))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        相关资源
        最近更新 更多