2014-07-13 4 views
0

으로 잠시 동안 고심하고 있습니다.데이터 세트의 패턴 일치가

설명 열에 두 개의 열, 설명 열에 대해 일치시키려는 패턴 열이있는 데이터 집합이 있습니다. 해당 패턴이 설명 열에 있으면 해당 열로 대체해야합니다. 별표 (*) 예를 들어

, 설명은 ABCDEisthedescription하고 패턴 ABCDE 인 경우 다음 새 설명해야 *

isthedescription

I 시도 하나 개 이상의 행이 다에 있기 때문에 data$NewDescription <- gsub(data$pattern,"\\*",Data$Description)

다음 taset, 오류가 발생합니다 (경고). "인수 '패턴'길이가 1보다 길고 첫 번째 요소 만 사용됩니다."

도움이 될만한 정보가 있습니다.

답변

0

여기서 mapply을 사용하여 각 행에 함수를 적용 할 수 있습니다. MrFlick의 접근 방식은 생각보다 간결 보인다 @

#sample data 
data<-data.frame(
    pattern=c("ABCDE","XYZ"), 
    Description=c("ABCDEisthedescription", "sillyXYZvalue") 
) 

지금 mapply

또한
mapply(function(p,d) gsub(p, "\\*", d, fixed=T), data$pattern, data$Description) 
# [1] "\\*isthedescription" "silly\\*value" 
0

,

Patterns <- paste0(
    sample(LETTERS[1:4],500,replace=TRUE), 
    sample(LETTERS[1:4],500,replace=TRUE), 
    sample(LETTERS[1:4],500,replace=TRUE), 
    sample(LETTERS[1:4],500,replace=TRUE)) 
## 
Desc <- paste0(Patterns,"isthedescription") 
Ptrn <- sample(Patterns,500) 
## 
Data <- data.frame(
    Description=Desc, 
    Pattern=Ptrn, 
    stringsAsFactors=FALSE) 
## 
newDesc <- sapply(1:nrow(Data), function(X){ 
    if(substr(Data$Description[X],1,4)==Data$Pattern[X]){ 
    gsub(Data$Pattern[X],"*",Data$Description[X]) 
    } else { 
    Data$Description[X] 
    } 
}) 

사용합니다.

관련 문제