[英]R regex extract standalone characters
我正在嘗試從多列中提取獨立的字母 R 或 O。 通過獨立,我的意思是 R 或 O (i) 由空格分隔或 (ii) 這是單元格中的唯一值。 這是一個可重現的示例。 假設我想從X1
和X2
列中提取獨立的 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.