2016-08-04 1 views
0

입력 정보를 출력으로 매핑하지만 입력을 동일한 데이터 프레임에 유지하는 R 함수를 작성하려고합니다. 나는 입력을 받아서 단일 값에 대한 올바른 출력을 제공하는 함수를 가지고 있지만, 이것을 재 작성하는 방법을 알기 위해 R 지식이 부족하기 때문에 벡터를 전달할 수있다.R - 다른 열의 계산 결과 인 데이터 프레임에 새 열을 추가하는 방법

프레임에 전달하고 데이터 프레임에 새 열을 추가하려고합니다. 아래 예제 코드 : 그래서 출력에 내가 d는 두 개의 열을 갖고 싶어

d <- data.frame(Type=c("_Swap_","Nothing","CAP", "FLOOR", "FLOOR", "BLAH", "Digital", "Something!")) 

d$newType= createTags(d$Type) 

createTags = function(Type){ 
    map = data.frame(input=c("Swap","Note","Option", "Floor", "FLOOR", "CAP", "Digital", "Bond"), 
        output=c("Swap","Note","Option", "CapFloor", "CapFloor", "CapFloor", "CapFloor", "Bond")) 

    tag="Unknown" 

    print(length(Type)) 

    for (j in 1:NROW(map)) {  
    input = map[j,]$input 
    output = map[j,]$output 

    ifelse (grepl(toupper(input), toupper(Type))){ 
     tag = output 
    }  
    } 

    return(tag) 
} 

, 하나는 원래의 유형이며, 다음 말에 뉴 타입이라는 두 번째 열이 있어야합니다.

답변

0

나는이 많이 놀아 끝났다. 나는 깨달았다하지만 덕분에 마크 팀스는 도움을, 나는 모든 경우

을 포함 할 수 있는지 확인 grepl를 사용하는 데 필요한
SRTLondon <- 
    data.frame(Type=c("_Swap_","Nothing","CAP", "FLOOR", "FLOOR", "BLAH", "Digital", "Something!")) 

createTags = function(Type){ 
    #browser() 
    map = data.frame(input=c("Swap","Note","Option", "Floor", "FLOOR", "CAP", "Digital", "Bond"), 
       output=c("Swap","Note","Option", "CapFloor", "CapFloor", "CapFloor", "CapFloor", "Bond"),stringsAsFactors = F) 

    work = data.frame(x=toupper(Type),stringsAsFactors = F) 
    work$tag="NA" 

    for (i in 1:NROW(work)) { 
    check = work$x[i] 

    for (k in 1:nrow(map)){ 
     input = map[k,'input'] 
     output = map[k,'output'] 

     if(grepl(toupper(input),check)) 
     { 
     work$tag[i]=output 
     break 
     } 

    } 

    } 
    return(work$tag) 
} 

SRTLondon $ type.tags = createTags (SRTLondon $ 타입)

0

당신은 출력으로 입력을 매핑 할 switch 기능을 사용할 수 있습니다 :

# Create sample data 
d <- data.frame(
    type = c("_Swap_","Nothing","CAP", "FLOOR", "FLOOR", "BLAH", "Digital", "Something!") 
) 

# Use the switch function to map inputs to outputs 
create_tags <- function(type) { 
    type <- gsub("[[:punct:]]", "", tolower(type)) # standardize the letter case and remove punctuation 
    switch(
    type, 
    "swap" = "Swap", 
    "note" = "Note", 
    "option" = "Option", 
    "floor" = "CapFloor", 
    "cap"  = "CapFloor", 
    "digital" = "CapFloor", 
    "bond" = "Bond", 
    "Unknown" 
) 
} 

# Switch isn't vectorized so we have to sapply our create_tags function onto d$type 
d$new_type <- sapply(d$type, create_tags) 
+0

감사합니다! 스위치 또는 사프리 기능을 알지 못했습니다. 배울 것이 많다! – David

관련 문제