2017-09-06 5 views
0

data.frameの各行をチェックする関数を書いています。チェックは、YESまたはNOを出力する条件文です。非常にストレートでなければなりません。しかし、どういうわけか結果は意図されたものではありません。私は2つの異なる方法を試みました。複数のifelseを追加して、列として追加するベクトルを作成する

ここではいくつかのテストデータを見つけてください:TEST TABLE

add_accepted_column <- function(df){ 
    shopmanager_status <- df[28] 
    source_medium <- df[22] 
    campaign <- df[23] 
    click_to_conversion <- df[29] 
    accepted <- c() 
    if(shopmanager_status %in% c("complete","processing") & source_medium %in% c("tradetracker/nl", "google/organic", "bing/organic", "yahoo/organic")){ 
     accepted <- c(accepted,"YES") 
    } 
    else if(shopmanager_status %in% c("complete","processing") & click_to_conversion < 1){ 
    accepted <- c(accepted,"YES") 
    } 
    else if(shopmanager_status %in% c("complete","processing") & campaign %in% c("1.Top-Brand")){ 
    accepted <- c(accepted,"YES") 
    } else{ 
    accepted <- c(accepted,"NO") 
    } 
} 

# 
add_accepted_column <- function(df){ 
    shopmanager_status <- df[28] 
    source_medium <- df[22] 
    campaign <- df[23] 
    click_to_conversion <- df[29] 
    #print(class(click_to_conversion)) 
    accepted <- c() 
    accepted <- c(accepted,if_else(shopmanager_status %in% c("complete","processing") & 
        source_medium %in% c("tradetracker/nl", "google/organic", "bing/organic", "yahoo/organic") || 
        click_to_conversion < 1 || 
        campaign %in% c("1.Top-Brand"),"YES","NO")) 
    return(accepted) 
} 

たとえばgoogle/cpcのために私にYESを与えるというスーパー奇妙です。

私が適用する実際のルール:

•shopmanager_status IN( "完全"、 "処理")AND( "tradetracker/NL"、 "有機/グーグル"、「ビング/ IN(source_medium IF IF有機」、 "ヤフー/オーガニック") - > YES

•shopmanager_status IN(IF "完全"、 "処理")AND(click_to_conversion < 1)IF - shopmanager_status IN(IF> YES

• "完了"、 "処理中(キャンペーンIN(1.Top-Brand") - > YES

•REST - > NO

もっと多くの例が必要な場合は、喜んで提供してください。どういうわけか、IF ELSEステートメントで何が起こっているのかわかりません。

+0

を試してください。<: 条件は長有し> 1と最初の要素だけを (shopmanager_status%%でC( "完了"、 "処理")&click_to_conversion場合で –

+0

最初のバージョンでは、結果を返さず、最初の行の値だけを計算し、2番目の行では "||"を使用するので、単一の値を返します。また、ロジックはfirst-secondとはまったく異なりますが、 'click_to_conversion' <1の場合は常に受け付けますが、' shopmanager_status'が完了または処理されている場合にのみ最初のものです。 onditionsはあります。 –

+0

@ChristophWolk最初にリードしています。私は投稿を編集します。ありがとう! –

答えて

2

Iは、警告メッセージを取得

df$accepted <- df$shopmanager_transaction_status %in% c("complete","processing") & 
    (df$sourceMedium %in% c("tradetracker/nl", "google/organic", 
          "bing/organic", "yahoo/organic") | 
    df$click_to_conversion_date < 1 | df$campaign == "1.Top-Brand") 
+0

ありがとう、これはうまくいくようです。ありがとう。少しでも読みやすい別の構文を好むしかし、これはトリックです! –

関連する問題