R - 提取正则表达式组

R - Extract Regex groups

我正在处理一个数据框 df,它的列 text 包含 "WORD""WORD, WORD2" 形式的字符串。更准确地说,这些块之前或之后可能会有一些乱码,但我知道如何处理它们。

我想使用 tidyverse 函数 extract 将两个词提取到两列 t1t2 中,以便将字符串 "WORD" 提取到"WORD"NA

我尝试了以下形式的命令

df |> extract(x, c("1", "2"), "([^[:punct:]]+),?[[:space:]]?([^[:punct:]]*)",
              remove = FALSE,
              convert = TRUE)

但是,这总是将第一行读入 "WORD"""(空字符串)。如何修改我的版本以获得所需的行为?

编辑:这是一个可能的数据帧

library(tidyverse)

df <- data.frame(x = c("123 WORD", "4564 WORD, TEST 1"))

# Expected output
df_out <- data.frame(x = c("123 WORD", "4564 WORD, TEST 1"),
                     t1 = c("WORD", "WORD"),
                     t2 = c(NA, "TEST"))

也许是这样的:

df <- data.frame(x = c("123 WORD", "4564 WORD, TEST 1"))

library(tidyverse)

df %>%  
  mutate(x1 = str_remove_all(x, '[0-9]*')) %>% 
  separate(x1, c("t1", "t2"), sep = ', ', remove = FALSE) %>% 
  select(-x1)
                  x    t1    t2
1          123 WORD  WORD  <NA>
2 4564 WORD, TEST 1  WORD TEST 
df %>%
  extract(x, c('t1','t2'), '(\w+)(?:, (\w+).*)?$', FALSE) %>%
  mutate(across(c(t1, t2), na_if, ''))

                  x   t1   t2
1          123 WORD WORD <NA>
2 4564 WORD, TEST 1 WORD TEST