我有一個 data.table,我想確定特定字符列中是否存在一組代碼。如圖所示,我將模式%like%作為值向量傳遞給。這種語法對我有用;但是,我想強制%like%函式將模式向量的每個元素視為文字,即不使用.作為正則運算式通配符。data.table的手冊上說對于like函式,可以設定為fixed = TRUE。有沒有一種方法可以強制我的代碼使用%like%, 將.和..視為文字而不是通配符?謝謝。J
這有效但處理“。” 錯誤地作為通配符:
Codes <- c("65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G")
ActualCodes <- dt[code_id %like% Codes]
這不會:
Codes <- c("65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G")
ActualCodes <- dt[code_id %like% Codes, fixed = TRUE]
uj5u.com熱心網友回復:
如果您查看幫助頁面,?'%like%'您應該會看到有兩種形式的like. 您嘗試使用的是中綴 tw0 引數版本,并且不接受fixed =TRUE引數。我確實嘗試使用“無&符號”版本但失敗了。有效的是避開“固定”策略,而是使用字符類方法來獲得“精確周期”:
DT = data.table(Name=c("65E..","65EXX","Xaa9G"), Salary=c(2,3,4))
DT
#---------------
Name Salary
1: 65E.. 2
2: 65EXX 3
3: Xaa9G 4
DT[Name %like% "^Mar"] # the example was copied from the help page
#Empty data.table (0 rows and 2 cols): Name,Salary
Codes <- c("65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G")
DT[ Name %like% Codes]
# Name Salary
#1: 65E.. 2
#2: 65EXX 3 # WRONG, try again
#3: Xaa9G 4
Codes <- gsub("[.]", "[.]", Codes, fixed = TRUE) #doesn't succeed
Codes
#[1] "65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G" # wrong result, no matches
Codes <- gsub("[.]", "[.]", Codes) # remove "fixed", character class succeeds
Codes
#[1] "65E[.][.]|9OX[.][.]|9OX1[.]|9OX2[.]|9OX3[.]|9OXZ[.]|Xaa9G"
DT[ Name %like% Codes]
# --- correct result----
Name Salary
1: 65E.. 2
2: Xaa9G 4 # SUCCESS
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/369344.html
