【问题标题】:Split column using regular expressions in R [duplicate]在R中使用正则表达式拆分列[重复]
【发布时间】:2020-08-10 10:18:46
【问题描述】:

我正在尝试将我的数据框中的列拆分为两列。列中的值如下所示:

column
user_author-5
creator-user-5

想要的结果是这样的:

column            number
user_author         5
creator-user        7

我这样做:

df %>%  
  tidyr::extract(col = "column", 
                 into = c("number"), 
                 regex = "-(\\d+)$", 
                 remove = FALSE
                 ) 

但我明白了:

column            number
user_author-5       5
creator-user-7      7

如何拆分列并同时从第一列中删除该数字?这里的问题是文本中也有一些“-”,所以我必须使用正则表达式“-(\d+)$”,而不是“-”。这让我有点不清楚

【问题讨论】:

  • tidyr::separate(df, column,into = c('column', 'number'), sep = '-', convert = TRUE)
  • @RonakShah 这里的问题是文本中也有一些“-”,所以我必须使用正则表达式“-(\d+)$”,而不是“-”。这让我有点不清楚

标签: r regex dataframe


【解决方案1】:

您可以使用extract 喜欢:

tidyr::extract(df, column, c('column', 'number'), '(.*)-.*?(\\d+)')
#        column number
#1  user_author      5
#2 creator-user      7

在正则表达式中,我们捕获两组数据。第一组直到第一个'-',第二组是最后一个数字。

数据

df <- structure(list(column = c("user_author-5", "creator-user-7")), 
class = "data.frame", row.names = c(NA, -2L))

【讨论】:

  • 但我希望列“creator-user”而不是“creator”中的值。所以它仍然分隔文本。那是不清楚的部分
  • tidyr::extract(df, column, c('column', 'number'), '(.*)-.*(\\d+)')
【解决方案2】:

在这种情况下您可以尝试另一种方法。

library(stringr)
df2 <- df %>% 
  mutate(colum2 = str_extract_all(column, regex("(?<=-)\\d{1,}$")))
#           column colum2
# 1  user_author-5      5
# 2 creator-user-7      7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-31
    • 2020-10-17
    • 2021-04-23
    • 2021-05-20
    • 2020-08-07
    • 2019-12-20
    • 2014-03-24
    • 2020-08-25
    相关资源
    最近更新 更多