2017-02-14 65 views
-1

我有一個data.table看起來這樣:自定義功能彙總數據

Category Sub-Category  Status 
    A   1   Draft 
    A   2   Draft 
    A   3   Draft 
    A   4   Draft 
    A   5   Draft 
    A   6   Draft 
    B   1   Final 
    B   2   Draft 
    B   3   Final 
    B   4   Final 
    C   1   Final 
    C   2   Final 
    C   3   Final 
    C   4   Final 
    C   5   Final 

我想按類別彙總這些數據,以便:

  1. 狀態爲「草稿」,如果所有子類別是「草稿」的狀態
  2. 如果子類別的狀態是「草稿」和「最終」的混合,則狀態爲「混合」
  3. 狀態爲「最終」所有的子類別在「最終」

最終輸出的狀態將是這樣的:

Category Status 
    A  Draft 
    B  Hybrid 
    C  Final 

我知道,如果我申請的功能是和,我可以做這樣的事情:

df <- aggregate(Status ~ Category, data = df, sum) 

對我來說,問題是,這將需要某種類型的自定義函數

+0

那麼,爲什麼你不能寫一個自定義函數然後像應用'sum'一樣應用它?由於您的邏輯非常簡單,因此編寫時間不應超過2-3分鐘。 –

回答

3

在這裏你去,試試這個..

customFunc <- function(x){ 

    if (length(unique(as.character(x))) == 2){ 
     return('Hybrid') 
    } 

    else { 
     return(unique(as.character(x))) 
    } 

} 

df <- aggregate(Status ~ Category, data = df, customFunc) 
+0

謝謝,這很好。另外印刷的獨特數量是一個非常優雅的解決方案。 – Ayelavan