2016-08-04 5 views
0

入力情報を出力にマッピングするが、同じデータフレームに入力を保持する関数をRに書き込もうとしています。私は入力を受け取り、単一の値に対して正しい出力を提供する関数を書いていますが、これを書き換えてベクトルに渡す方法を知っているR知識が不足しています。R - 別の列の計算結果であるデータフレームに新しい列を追加するにはどうすればいいですか?

フレームに渡し、データフレームに新しい列を追加します。以下のコード例:

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) 
} 

は、だから私はdは2つの列を持つようにしたい出力で、一つは元の型で、その後、最後にニュータイプと呼ばれる第二のカラムがあるはずです。

答えて

0

私はこのたくさんで遊んでしまいました。おかげで助けをマークTimms、私は私がすべてのケース

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 $タイプ)をカバーできることを確認するgreplを使用するために必要な実現が

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

関連する問題