簡體   English   中英

R 正則表達式提取獨立字符

[英]R regex extract standalone characters

我正在嘗試從多列中提取獨立的字母 R 或 O。 通過獨立,我的意思是 R 或 O (i) 由空格分隔或 (ii) 這是單元格中的唯一值。 這是一個可重現的示例。 假設我想從X1X2列中提取獨立的 R 或 O 。

df <- data.frame(X1 = c( "EHO", "X 1 R","R"),
                 X2 = c( "Y R E", "X A 1", "AER"), 
                 X3 = NA)

這是期望的結果。

data.frame(X1 = c("", "R", "R"),
           X2 = c("R", "", ""))

這是我到目前為止所嘗試的。 第一種方法是有問題的,因為提取了來自 AER 的 R 和來自 EHO 的 O(也沒有提取來自“Y R E”的 R)。

require(stringr)
sapply(df[,1:2], function(x) ifelse( df$X3 %in% NA, str_extract(x, "\\s?[O|R]$"), X3))

所以我試過這個,它解決了上述問題,但現在它無法從df[3,1]中提取 R 。

sapply(df[,1:2], function(x) ifelse( df$X3 %in% NA, str_extract(x, "(?![A-Z]+?)\\s?[O|R]$?"), X3))

我應該如何修復模式來獲得這個?

您可以使用單詞邊界:

sapply(df, stringr::str_extract, '\\b[RO]\\b')

#     X1  X2  X3
#[1,] NA  "R" NA
#[2,] "R" NA  NA
#[3,] "R" NA  NA

但是,請注意str_extract將僅提取"R""O"中的一個,以先到者為准。

stringr::str_extract('EH R O', '\\b[RO]\\b')
#[1] "R"

如果你想提取它們,你可能需要使用str_extract_all

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM