2017-09-06 65 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。

實際的規則,我想申請:

•IF shopmanager_status IN( 「完整」, 「處理」)和IF(source_medium IN( 「tradetracker/NL」, 「谷歌/有機」,「冰/有機」, 「雅虎/有機」) - > YES

•IF shopmanager_status IN( 「完全」, 「處理」)AND IF(click_to_conversion < 1) - > YES

•IF shopmanager_status IN( 「complete」,「processing AND(campaign IN(」1.Top-Brand「) - >是

•REST - >否

如果需要更多示例,我很樂意提供。不知何故,我無法找出IF ELSE語句發生了什麼。

+0

我得到警告消息:%C( 在如果(shopmanager_status% 「完全」, 「處理」)&click_to_conversion <: 條件具有長度> 1且僅第一元件將被使用 –

+0

在第一個版本中,你不返回結果,並且你只計算第一行的值,第二個版本使用「||」,所以它返回一個單一的值,再次只計算如果'click_to_conversion' <1,邏輯就完全不同於第一個 - 但是第一個只有在'shopmanager_status'完成或處理時纔會被接受。請指定c狀態是。 –

+0

@ChristophWolk首先是領先我將編輯帖子。謝謝! –

回答

2

嘗試

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

謝謝,這似乎很好地工作。謝謝。仍然更喜歡另一種語法來更容易閱讀。但這是訣竅! –