2017-01-24 4 views
1

나는 이것이 보이지 않는 쉬운 수정이라고 기대하고 있습니다. 즉, 데이터 프레임에 걸쳐 패턴의 목록을 검색 후 TSV와 출력을 저장 :r - grepl, 패턴 목록에 대한 데이터 프레임을 검색하고 각 패턴이 발견 된 행을 기록하십시오.

I 최종 데이터 프레임 dfSubset 다른 항목을 작성할 것이다 이것에 기능을 추가하고 붙여해야
dfSubset <- df[apply(df, 1, function(i) any(grepl(paste(my.list, collapse="|"), i))),] 
write_tsv(dfSubset, "dfSubset.txt", col_names=TRUE) 

각 검색어가있는 행 옆의 my.list에서 검색어를 검색하십시오. 여기

my.list <- c("035", "566", "60883", "6110", "6752", "6751", "680","681","682","683","684","684", 
      "685","686", "7048", "70583","7070", "7078", "7079", "7071", "7280", "72886", 
      "7714", "7715", "7854", "9583", "99662", "99762", "9985") 

# Fake data 
set.seed(10) 
df = as.data.frame(replicate(5, sample(c(my.list, 1e5:(1e5+1000)),10)), stringsAsFactors=FALSE) 

원하는 출력의 예는 pattern_found 칼럼 참고 :

V1  V2  V3  V4  V5  Pattern_found 
3 100409 100087 100767 100145 7048  7048 
4 100682 100583 100336 100895 100719  682 
7 100252 100024 100829 100813 7078  7078 
여기

는 eipi10 의해 I 다른 포스트에 대한 응답에서 사용하고 가짜 데이터 인

귀하의 도움과 제안에 감사드립니다.

+0

무엇 '이다 SSTI.list'? – Sotos

+0

SSTI.list는 오타이며 이제 my.list로 변경됩니다. –

+0

출력이 어떻게 나타나는지 완전히 모르겠습니다. – Haboryme

답변

1

이 시도 :

library(stringr) 
rgx = paste(my.list, collapse='|') 

dfSubset$Pattern_found = apply(dfSubset, 1, function(i) str_extract(paste(i, collapse=','), rgx)) 

> dfSubset 
#  V1  V2  V3  V4  V5 Pattern_found 
# 3 100409 100087 100767 100145 7048   7048 
# 4 100682 100583 100336 100895 100719   682 
# 7 100252 100024 100829 100813 7078   7078 
1

기본 R이 dfSubset에 추가로 아이디어,

ind <- unlist(sapply(my.list, function(i) grep(i, do.call(paste, dfSubset)))) 
data.frame(dfSubset[as.integer(ind),], Pattern_found = names(ind)) 

#  V1  V2  V3  V4  V5 Pattern_found 
#4 100682 100583 100336 100895 100719   682 
#3 100409 100087 100767 100145 7048   7048 
#7 100252 100024 100829 100813 7078   7078 

또는 벡터화 된 방법으로 처음부터 stringi를 사용하여,

library(stringi) 
df$new <- stri_extract_all_regex(do.call(paste, df), paste(my.list, collapse = '|'), simplify = TRUE)[,1] 
df[!is.na(df$new),] 

#  V1  V2  V3  V4  V5 new 
#3 100409 100087 100767 100145 7048 7048 
#4 100682 100583 100336 100895 100719 682 
#7 100252 100024 100829 100813 7078 7078