有沒有更好更快的方式實現下面? 基本上,我正在尋找(搜索)數據框中的模式。在R的向量模式搜索
以下適用於我。但我無法調整它。時間複雜性是我真正關心的。
searchPattern <- function(ls, pattern){
sapply(ls, function(x) {
tmp <- all(table(x)[names(table(pattern))]>=table(pattern))
ifelse(is.na(tmp),FALSE,tmp)
})
}
pattern <- c(5,1)
df <- list(1,c(1,7,4,5),c(6,5,1,1),5:10,c(5,5,1,1))
df
searchPattern(df,pattern)
結果是一個邏輯向量:
[1] FALSE TRUE TRUE FALSE TRUE
在這個例子中的模式僅僅是c(5,1)
,但循環得到不同的模式,如在此基礎上我揹着1,c(1,7,4,5),c(6,5,1,1),5:10,c(5,5,1,1)
稍後再進行其他轉換。什麼是理想和快速的方式來做到這一點? 任何建議表示讚賞。
也許像'vapply(DF,函數(x)的長度(相交(X,圖案))==長度(模式) ,邏輯(1L))'。 – A5C1D2H2I1M1N2O1R2T1
使用'purrr'包中的'map'函數來提高效率:'map(df,function(x)length(intersect(pattern,x))== length(pattern))'。你也可以使用基礎Map:Map(函數(x)長度(intersect(pattern,x))==長度(pattern),df)'。 – Abdou
Thx。但是函數應該返回'[1] FALSE FALSE TRUE FALSE TRUE',用於'pattern <-c(5,1,1)'而不是'[1] FALSE FALSE FALSE FALSE FALSE' –