【问题标题】:Regex separate based on specific space - R (dplyr::separate)基于特定空间的正则表达式 - R (dplyr::separate)
【发布时间】:2021-11-20 01:51:02
【问题描述】:

我想根据特定的空格分隔一列。

例如,我不想在每个空间中都分开,但只有在空间满足特定条件时。

我尝试将满足条件的每个空格分开,但这会删除空格和条件。例如,如果我尝试删除前面有一个字母的每个空格,然后有一个数字,这会删除字母、空格和数字。

在我尝试使用与 dplyr 分开的代码中,但如果有另一个最佳解决方案我会采用!

提前致谢!

代码

library(tidyverse)

df <- tibble(
column = c("Current Assets 3a 10.001", "Cash and Equivalents 2b 1.009", "Debt 2.050" )
)


df %>% 
  dplyr::separate(value,
           into = c("column1","column2","column3"),
           sep = 'insert regex pattern here')

#Ideally i would want something like that

tibble(
  column1 = c("Current Assets", "Cash and Equivalents", "Debt"),
  column2 = c("3a", "2b", NA),
  column3 = c(10.001, 1.009, 2.050)
  
)

【问题讨论】:

    标签: r regex dplyr


    【解决方案1】:

    您可以在tidyr::extract 中传递正则表达式模式。

    tidyr::extract(df, column,  c("column1","column2","column3"), 
                   '(.*?)\\s(\\d[a-z])?\\s?(\\d+\\.\\d+)', convert = TRUE)
    
    #  column1              column2 column3
    #  <chr>                <chr>     <dbl>
    #1 Current Assets       "3a"      10.0 
    #2 Cash and Equivalents "2b"       1.01
    #3 Debt                 ""         2.05
    

    【讨论】:

    • 非常感谢!!很完美,我不知道这个提取功能。我只有最后一个问题我如何才能维护不符合此标准的文本。例如,如果一行中的文本不遵循此正则表达式,则提取函数会将其转换为 NA,对吧?
    • 没错。您可以查看示例的最后一行,它没有 column2 值,它会为它返回一个空值。
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 2013-02-28
    • 1970-01-01
    • 2018-02-19
    • 2018-08-27
    • 1970-01-01
    • 2020-04-19
    • 2019-02-26
    相关资源
    最近更新 更多