【问题标题】:R: Extracting numerical values from strings in a columnR:从列中的字符串中提取数值
【发布时间】:2020-06-07 07:48:00
【问题描述】:

我对数据框的 1 个特定列感兴趣,其中每一行包含一个社区的名称和分配给该社区的特定编号。

TOR - HOOD - Banbury-Don Mills (42) (23.6%)

请查看此图片以更好地理解 neighborhoodnum

我只想提取第一个括号内的数字。 TOR - HOOD - Alderwood (20) (25.4%)

我尝试过使用 stringr 包,但所有函数一次只需要 1 个字符串。此列中有 140 行,我想要所有行中的值。我不确定如何遍历列中的每个字符串

Here is what I have tried and the results

以及我使用的一些代码,但出现此错误(UseMethod("type") 中的错误:没有适用于 'type' 的适用方法应用于类 "c('tbl_df', 'tbl', ' data.frame')")

hood_data<-tibble(hood=demo_edu_dataset$Geography)
head(hood_data)

hoodnum<-hood_data %>%
  #separate(hood, into= c("name", "number"), sep = "")
  stringr::str_extract_all(hood_data, "\\d")

谢谢

【问题讨论】:

  • 可能是stringr::str_extract(hood_data, "(?&lt;=\\()\\d+(?=\\))")?
  • 您好,法利亚·坎达克。欢迎来到 StackOverflow!请不要在此处发布代码或数据的图像。请阅读有关how to ask a good question 的信息以及如何提供minimale reproducible example。这样你就可以帮助别人帮助你!

标签: r regex stringr data-extraction


【解决方案1】:

也许你可以试试下面的gsub,例如

df <- data.frame(X = c("TOR - HOOD - Alderwood (20) ( 25.4%)",
                       "TOR - HOOD - Annex (95) ( 27.9%)"))

df$Y <- as.numeric(gsub(".*?\\((\\w+)\\).*","\\1",df$X))

这样

> df
                                     X  Y
1 TOR - HOOD - Alderwood (20) ( 25.4%) 20
2     TOR - HOOD - Annex (95) ( 27.9%) 95

【讨论】:

    【解决方案2】:
    hoodnum<-hood_data %>%
     separate(Geography, into= c("name", "number"), sep = "\\(")
    

    成功了

    【讨论】:

      【解决方案3】:

      或使用 stringr 包中的 str_extract 以及正向向后和向前:

      str_extract(YOURDATA, "(?<=\\()\\d{1,}(?=\\))")
      

      此正则表达式表示:“当您在左侧看到 ( 和在右侧看到 ) 时,匹配中间至少有 1 位数字的数字”。 如果将as.numeric 包裹在整个表达式周围,数字将从字符转换为数字:

      as.numeric(str_extract(df$X, "(?<=\\()\\d{1,}(?=\\))"))
      

      【讨论】:

        猜你喜欢
        • 2021-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多