2017-03-10 36 views
0

我有一組800,000個貸款,每個貸款具有唯一的貸款ID。我想過濾某些標準,這樣在一個子集中,我最終只能得到100個貸款。我有這100個貸款ID的列表,並希望通過將我的子集與另一個子集進行比較來確認這些步驟是否正確完成,以查看哪些存在/缺失/額外。爲了簡化我的例子假設:比較一個較短的字符向量與R中的較長字符以確定任何匹配(以及哪個)

x <- letters 
y <- letters[2:5] 

我想X比較到y,讓我看到了TRUE和x[2:5]假的X 的所有其他值即使y不以相同的順序爲x。換句話說,我想測試x的每個值是否是y的值之一。

這種感覺簡單,最好的答案到目前爲止,我發現是使用for()循環: 牛逼< - 矢量(長度=長度(X))

for(i in 1:length(x)){ 
    t[i] <- any(x[i]==y) 
} 

是否有一個更簡單的方法?

+4

'%%%'應該有效。 – JasonWang

+1

'intersect(x,y)'可能是有用的或'is.element(x,y)' –

+0

@JasonWang這對於簡化的例子有效,但是當我第一次在貸款數據上嘗試時,它不起作用 - 認爲這是功能,但我認爲它可能是數據格式。謝謝! – rroche

回答

0

也許stringr包是你在找什麼:

library(stringr) 

str_detect(string = "bcde", pattern = letters) 
str_detect(string = "bcde", pattern = "^b") 
str_detect(string = "bcde", pattern = "b$") 
str_detect(string = "bcde", pattern = "b|f") 
str_detect(string = "bbbe", pattern = "b{3}|b{4}") 

尋找的模式是默認正則表達式使複雜的圖案上面例舉。

相關問題