2015-11-28 16 views
-1

內切我有一個數據幀,如以下示例:施加dplyr

ID <- 1:6 
    DRUG <- c(1,1,0,1,0,0) 
    PRD <- c(1,1,2,2,3,3) 
    MAX <- c(15,20,50,18,80,350) 

    df <- data.frame(ID,DRUG,PRD,MAX) 

欲倉MAX到預先定義的時間間隔和用於ID在每個數做一總結通過DRUGPRD類別。

我的數據集比所提供的示例大得多。

有沒有辦法使用dplyr或任何其他軟件包在R中進行分箱和彙總?

我試過這個tapply(df$MAX,cut(df$MAX,4),length),但它將數據分成相等的間隔,這不是我想要實現的。此外,它沒有給出DRUGPRD的總結。

更新:我想出了一個更好的解決方案,由數據框中的變量構成;但是,如果間隔有NA觀測數據的數量,那麼它不會將其保留在輸出摘要中。我怎樣才能將它保留在我的摘要中?除了報告n之外,如何使輸出成爲百分比。

df %>% 
    group_by(DRUG,PRD,cut(MAX,breaks=c(0,20,40,60,Inf))) %>% 
    summarise(n=n()) 

這給:

DRUG PRD cut(MAX, breaks = c(0, 20, 40, 60, In...  n 
    (dbl) (dbl)         (fctr) (int) 
1  0  2         (40,60]  1 
2  0  3         (60,Inf]  2 
3  1  1         (0,20]  2 
4  1  2         (0,20]  1 

所以在這裏,例如,從(0,15]對於DRUG==0PRD==2間隔因爲沒有內的任何值沒有出現在彙總這個間隔,我怎麼能有所有的時間間隔,即使沒有任何價值的間隔(它應該給NA而不是)?另外,我怎麼可以添加一個計算的百分比基於總數ID在每個DRUGPRD類別?

+2

有很多的工作在SO例子。使用問題標題中的一些關鍵字進行搜索。 –

+0

參見'cut','dplyr :: group_by'和'dplyr :: summarise'。 – jeremycg

+0

@jeremycg我已經看到cut的例子是你定義間隔的數量,但不是間隔本身,這不是目標。我想手動定義它們。 – Amer

回答

1

按照該意見,你已經嘗試的東西,你可以使用以下命令:

tapply(df$MAX,cut(df$MAX, breaks = c(0, 15, 30, 60, 100, Inf)),length) 
+0

但是,我仍然需要對數據進行子集處理,但我可以管理這些數據。 – Amer